我无法从现有 PDF 旋转我的页面
I can't rotate my page from existing PDF
我刚刚做了一个简单的 Java 控制台项目,它将内容写入现有的 PDF,但我无法旋转页面。我已经尝试旋转 页面 尝试在 Whosebug 上找到的许多示例,但对我没有任何作用。
我的Class
public class PDfRotate{
private static String workingDir = System.getProperty("user.dir");
private static String FILERIN = workingDir + "/Rin.pdf";
private static String FILERIN_INPUT = workingDir + "/Test.pdf";
private static String FILERIN_OUTPUT = workingDir + "/RinOutput.pdf";
private static Document document;
public static void main(String[] args) throws IOException, DocumentException {
Document document = new Document();
rotatePdf(document);
document.close();
}
public static void rotatePdf(Document document) throws DocumentException, IOException{
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILERIN_OUTPUT));
document.open();
Paragraph par = new Paragraph("hello");
document.add(par);
document.add(PageSize.A4.rotate());
PdfReader reader = new PdfReader(FILERIN);
PdfImportedPage page = writer.getImportedPage(reader,1);
Image instance = Image.getInstance(page);
document.add(instance);
}
将页面旋转 90°
起初我理解问题和评论是关于将文档页面(包括它们的内容)旋转 90°。
iText 示例 RotatePages.java from chapter 13 of iText in Action - Second Edition 对此进行了演示。焦点代码:
PdfReader reader = new PdfReader(SOURCE);
int n = reader.getNumberOfPages();
int rot;
PdfDictionary pageDict;
for (int i = 1; i <= n; i++) {
rot = reader.getPageRotation(i);
pageDict = reader.getPageN(i);
pageDict.put(PdfName.ROTATE, new PdfNumber(rot + 90));
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT));
stamper.close();
reader.close();
OP 对此评论说他不想旋转内容,只想旋转页面。 因此:
将纵向切换为横向,反之亦然
要在横向和纵向之间切换,可以执行以下操作:
PdfReader reader = new PdfReader(SOURCE);
int n = reader.getNumberOfPages();
PdfDictionary pageDict;
for (int i = 1; i <= n; i++) {
Rectangle rect = reader.getPageSize(i);
Rectangle crop = reader.getCropBox(i);
pageDict = reader.getPageN(i);
pageDict.put(PdfName.MEDIABOX, new PdfArray(new float[] {rect.getBottom(), rect.getLeft(), rect.getTop(), rect.getRight()}));
pageDict.put(PdfName.CROPBOX, new PdfArray(new float[] {crop.getBottom(), crop.getLeft(), crop.getTop(), crop.getRight()}));
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT));
stamper.close();
reader.close();
这显然会删掉一些内容。
自己解决.
我应该在打开文档之前设置旋转。
document.setPageSize(PageSize.A4.rotate());
document.open();
....
document.close();
我刚刚做了一个简单的 Java 控制台项目,它将内容写入现有的 PDF,但我无法旋转页面。我已经尝试旋转 页面 尝试在 Whosebug 上找到的许多示例,但对我没有任何作用。
我的Class
public class PDfRotate{
private static String workingDir = System.getProperty("user.dir");
private static String FILERIN = workingDir + "/Rin.pdf";
private static String FILERIN_INPUT = workingDir + "/Test.pdf";
private static String FILERIN_OUTPUT = workingDir + "/RinOutput.pdf";
private static Document document;
public static void main(String[] args) throws IOException, DocumentException {
Document document = new Document();
rotatePdf(document);
document.close();
}
public static void rotatePdf(Document document) throws DocumentException, IOException{
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILERIN_OUTPUT));
document.open();
Paragraph par = new Paragraph("hello");
document.add(par);
document.add(PageSize.A4.rotate());
PdfReader reader = new PdfReader(FILERIN);
PdfImportedPage page = writer.getImportedPage(reader,1);
Image instance = Image.getInstance(page);
document.add(instance);
}
将页面旋转 90°
起初我理解问题和评论是关于将文档页面(包括它们的内容)旋转 90°。
iText 示例 RotatePages.java from chapter 13 of iText in Action - Second Edition 对此进行了演示。焦点代码:
PdfReader reader = new PdfReader(SOURCE);
int n = reader.getNumberOfPages();
int rot;
PdfDictionary pageDict;
for (int i = 1; i <= n; i++) {
rot = reader.getPageRotation(i);
pageDict = reader.getPageN(i);
pageDict.put(PdfName.ROTATE, new PdfNumber(rot + 90));
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT));
stamper.close();
reader.close();
OP 对此评论说他不想旋转内容,只想旋转页面。 因此:
将纵向切换为横向,反之亦然
要在横向和纵向之间切换,可以执行以下操作:
PdfReader reader = new PdfReader(SOURCE);
int n = reader.getNumberOfPages();
PdfDictionary pageDict;
for (int i = 1; i <= n; i++) {
Rectangle rect = reader.getPageSize(i);
Rectangle crop = reader.getCropBox(i);
pageDict = reader.getPageN(i);
pageDict.put(PdfName.MEDIABOX, new PdfArray(new float[] {rect.getBottom(), rect.getLeft(), rect.getTop(), rect.getRight()}));
pageDict.put(PdfName.CROPBOX, new PdfArray(new float[] {crop.getBottom(), crop.getLeft(), crop.getTop(), crop.getRight()}));
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT));
stamper.close();
reader.close();
这显然会删掉一些内容。
自己解决.
我应该在打开文档之前设置旋转。
document.setPageSize(PageSize.A4.rotate());
document.open();
....
document.close();