İçeriği kırpmadan mevcut PDF belgesine yeni bir sayfa boyutu ayarlamak istiyorum. Aşağıdaki kodu yazıyorum ama sadece PDF dosyamı alttan keserek içerik kaybına yol açıyor.Java IText kullanarak mevcut PDF belgesine yeni sayfa boyutu ayarlama
Geçerli boyut 8.26 "X 11.69" ve bunu 8.5 "X 11" yapmam gerekiyor.
Kodum yalnızca 11.59 - 11 dönüştürür. 8.26 değiştirmeye çalışıyorum ancak ıslanma.
Herhangi biri yardımcı olabilir mi? Java ile itextpdf-5.5.8 kullanıyorum.
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.GrayColor;
import com.itextpdf.text.pdf.PdfArray;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfDictionary;
import com.itextpdf.text.pdf.PdfName;
import com.itextpdf.text.pdf.PdfNumber;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfRectangle;
import com.itextpdf.text.pdf.PdfStamper;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class PageSize {
public static final String SRC = "C:/Temp/BC.pdf";
public static final String DEST = "C:/Temp/BC_New.pdf";
public static void main(String[] args) throws IOException, DocumentException {
File file = new File(DEST);
file.getParentFile().mkdirs();
new PageSize().manipulatePdf(SRC, DEST);
}
public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
PdfReader reader = new PdfReader(src);
int n = reader.getNumberOfPages();
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
// properties
PdfContentByte over;
PdfDictionary pageDict;
PdfRectangle rect = new PdfRectangle(55, 76, 560, 816);
PdfArray mediabox;
float llx, lly, ury,llz;
// loop over every page
for (int i = 1; i <= n; i++) {
pageDict = reader.getPageN(i);
mediabox = pageDict.getAsArray(PdfName.MEDIABOX);
llx = mediabox.getAsNumber(0).floatValue();
lly = mediabox.getAsNumber(1).floatValue();
llz = mediabox.getAsNumber(2).floatValue();
ury = mediabox.getAsNumber(3).floatValue();
mediabox.set(1, new PdfNumber((lly + 50)));
over = stamper.getOverContent(i);
over.saveState();
over.restoreState();
}
stamper.close();
reader.close();
}
}
İşte GÜNCELLEME Ben 11'e" 11,69" azaltmak için kullanılan koddur. İyi çalışıyor. Ama, bu genişlik 8,26 8.5"
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.GrayColor;
import com.itextpdf.text.pdf.PdfArray;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfDictionary;
import com.itextpdf.text.pdf.PdfName;
import com.itextpdf.text.pdf.PdfNumber;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfRectangle;
import com.itextpdf.text.pdf.PdfStamper;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class PageSize {
public static final String SRC = "C:/Temp/Test.pdf";
public static final String DEST = "C:/Temp/BC_New.pdf";
public static void main(String[] args) throws IOException, DocumentException {
File file = new File(DEST);
file.getParentFile().mkdirs();
new PageSize().manipulatePdf(SRC, DEST);
}
public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
PdfReader reader = new PdfReader(src);
int n = reader.getNumberOfPages();
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
// properties
PdfContentByte over;
PdfDictionary pageDict;
PdfArray mediabox;
float llx, lly, ury,llz;
// loop over every page
for (int i = 1; i <= n; i++) {
pageDict = reader.getPageN(i);
mediabox = pageDict.getAsArray(PdfName.MEDIABOX);
llx = mediabox.getAsNumber(0).floatValue();
lly = mediabox.getAsNumber(1).floatValue();
ury = mediabox.getAsNumber(3).floatValue();
mediabox.set(0, new PdfNumber((llx - 17)));
mediabox.set(1, new PdfNumber((lly + 50)));
over = stamper.getOverContent(i);
over.saveState();
over.restoreState();
}
stamper.close();
reader.close();
}
}
ÇÖZÜLDÜ artmaz.
Ben değiştirmeye çalışıyordum kaynak dosyada bir sorun oldu orijinal kaynak dosyası bir 8.26 oldu "X 11.69". Bir hava programı, dosyaya bir logo ekler ve yeni bir dosyaya kaydeder.
Bir şekilde bu dönüştürme nedeniyle, yeni kaynak dosyanın X ekseni kilitlendi ve dolayısıyla programım değiştirilemedi. x ekseni:
Bu yüzden, programımı ilk adım olarak taşıyorum ve işe yaradı. Programım önce x ve y eksenini değiştirir ve daha sonra dosyayı logosunu ekleyen diğer programa geçirir.
Bunun için Bruno'ya teşekkürler. :)
"Java ile iText-2.1.4 kullanıyorum" diyorsunuz. Kodunuz "import com.itextpdf.text" yazıyor. Bu bir çelişkidir. Kodunuz iText 5 kodudur. IText 2.1.4 ile kullanamazsınız. IText 2.1.4'ü kullanmamalısınız. Daha fazla bilgi için [Can iText 2.1.7 veya daha önce ticari olarak kullanılabilir mi?] Cevabını okuyun (http://developers.itextpdf.com/question/can-itext-217-orlier-be-used-commercially) –
Oh. Benim Bad, her ikisini de kullandığım kütüphaneler yerleştirdim ve kafam karıştı. Sorumu güncellendi. Onun itextpdf-5.5.8. Cevap için teşekkürler. Kodumda herhangi bir öneri veya gelişme var mı? – Techidiot