我想在不裁剪內容的情況下將新頁面大小設置爲現有PDF文檔。我正在編寫下面的代碼,但它只是從底部裁剪我的PDF文件,導致內容丟失。使用Java IText將新頁面大小設置爲現有PDF文檔
當前尺寸爲8.26「X 11.69」,我需要將其設置爲8.5「X 11」。
我的代碼只將11.59轉換爲11。試圖改變8.26,但它不是woking。
任何人都可以幫忙嗎?我正在使用itextpdf-5.5.8和Java。
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();
}
}
修訂 這裏是我用來減少11.69" 到11" 的代碼。它工作正常。但是,它不會增加寬度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();
}
}
解決:
這是與源文件有問題,我試圖修改原始的源文件是8.26 「X 11.69」。hava程序爲文件添加一個徽標並將其保存到一個新文件中。
不知何故,由於這種轉換,新源文件的X軸被鎖定,因此我的程序無法修改x軸
因此,我將我的程序作爲第一步移動並運行。我的程序首先修改x和y軸,然後將文件傳遞給其他程序,該程序會添加標誌。
感謝布魯諾對此。 :)
你說「我正在使用iText-2.1.4和Java」。你的代碼說「import com.itextpdf.text。」這是一個矛盾。您的代碼是iText 5代碼。你不能在iText 2.1.4中使用它。你甚至不應該使用iText 2.1.4。有關更多信息,請閱讀[iText 2.1.7或更早版本可否在商業上使用?]的答案(http://developers.itextpdf.com/question/can-itext-217-or-earlier-be-used-commercially) –
哦。我的壞,我有兩個圖書館放置和混淆我正在使用哪一個。更新我的問題。它的itextpdf-5.5.8。感謝您的迴應。任何建議或改進我的代碼? – Techidiot