2016-02-12 106 views
1

我有一個美化窗體,位於A4頁面的上半部分,我希望它能夠旋轉並放大到縱向佈局大小填滿A4然後在傳真之前保存。否則,傳真服務程序將僅以部分信息將其傳真出去。這是我的嘗試,結果與輸入pdf相同。這是我使用iText進行編程的第一天,所有的Google沒有得到我想要的。請讓我知道你是否可以幫忙。謝謝,如何使用iText在A4的一半上使用美化PDF返回到肖像和A4上的全尺寸

public class CopeALandscapePdfFiletoPortraitPdfFile { 
//public static final String SRC = "resources/pdfs/landscapeForm.pdf"; 
public static final String SRC = "resources/pdfs/potraitForm.pdf"; 
public static final String DEST = "results/stamper/portraitFormAfterCopy.pdf"; 

public static void main(String[] args) throws IOException, DocumentException 
{ 
    copyPdf(); 
} 

private static void copyPdf() throws IOException, DocumentException 
{ 
    Document document = new Document(PageSize.A4); 

    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(DEST)); 
    document.open(); 
    PdfContentByte cb = writer.getDirectContent(); 

    PdfReader reader = new PdfReader(SRC); 
    document.newPage(); 
    int n = reader.getNumberOfPages(); 
    PdfDictionary page; 
    PdfNumber rotate; 
    for (int p = 1; p <= n; p++) { 
     page = reader.getPageN(p); 
     rotate = page.getAsNumber(PdfName.ROTATE); 

     if (rotate == null) { 
      page.put(PdfName.ROTATE, new PdfNumber(90)); 
     } else { 
      page.put(PdfName.ROTATE, new PdfNumber((rotate.intValue() + 90) % 360)); 
     } 

    } 
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(DEST)); 
    stamper.close(); 

    PdfImportedPage ipage = writer.getImportedPage(stamper.getReader(), 1); 
    cb.addTemplate(ipage, 0, 0); 

    document.close(); 
} 

}

+1

是您的形式互動或沒有? – mkl

+0

不是互動的,我也發現它是傳真圖片,所以我現在需要從pdf中獲取圖片並旋轉圖片並將其放大。但我無法旋轉PDXObjectImage,尋找方法... –

+0

答案有幫助嗎?或者你需要額外的幫助解決這個問題? – mkl

回答

0

當你想反正放大PDF,我會把放大和旋轉成一個仿射變換。因此:

PdfReader reader = new PdfReader(SOURCE); 
Document document = new Document(PageSize.A4); 
PdfWriter writer = PdfWriter.getInstance(document, RESULT); 
document.open(); 

double sqrt2 = Math.sqrt(2); 
Rectangle pageSize = reader.getPageSize(1); 
PdfImportedPage importedPage = writer.getImportedPage(reader, 1); 
writer.getDirectContent().addTemplate(importedPage, 0, sqrt2, -sqrt2, 0, pageSize.getTop() * sqrt2, -pageSize.getLeft() * sqrt2); 

document.close(); 

EnlargePagePart.java

例如本頁

original page

它產生

zoomed, rotated upper half