2014-02-26 119 views
2

我正在使用適用於Java的iText API,並且遇到了試圖將多個TIFF組合成PDF的問題。有些是旋轉的,有些則不是。我無法弄清楚如何旋轉和保留頁面的寬度/高度。IText PDF文檔 - 旋轉一些但不是全部頁面

這SO是有用的,但僅適用於旋轉整個文檔

iText Document : Rotate the page

下面是一些代碼,我使用的測試人爲旋轉圖像。這有效,但切斷了圖像。例如,如果原始圖像是1000(寬)x2000(高),則會旋轉它,但圖像的一半會丟失,因爲頁面大小保持爲1000x2000。希望這是有道理的。

Image img = Image.getInstance(part); //part is a string pointer to a file. 
Rectangle imgPageSize; 

if (i == 0) {// testing - rotate first page 
    img.setRotationDegrees((float) 90.0); //testing 
    imgPageSize = new Rectangle(img.getHeight(), img.getWidth()); 
} 

TiffToPDF.setPageSize(imgPageSize); // this does not work 
if (!TiffToPDF.isOpen()) 
    TiffToPDF.open(); 
TiffToPDF.add(img); 

回答

4

請看看rotate_pages.pdf文件。在這個例子中,我們從一個縱向頁面開始,然後我們有一個橫向頁面,然後是一個倒立的頁面,一個海景的頁面,最後是一個縱向的頁面。

頁面方向是使用頁面事件改變:

public class Rotate extends PdfPageEventHelper { 
    protected PdfNumber rotation = PdfPage.PORTRAIT; 
    public void setRotation(PdfNumber rotation) { 
     this.rotation = rotation; 
    } 
    public void onEndPage(PdfWriter writer, Document document) { 
     writer.addPageDictEntry(PdfName.ROTATE, rotation); 
    } 
} 

正如你可以看到,我們添加一個/Rotate進入頁字典,我們結束頁面之前。對於旋轉可能的值是:

  • PdfPage.PORTRAIT
  • PdfPage.LANDSCAPE
  • PdfPage.INVERTEDPORTRAIT
  • PdfPage.SEASCAPE

我們使用頁面事件是這樣的:

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename)); 
Rotate rotation = new Rotate(); 
writer.setPageEvent(rotation); 

當我們想改變旋轉角度時,我們簡單地在事件類中使用setRotation()方法。例如:

rotation.setRotation(PdfPage.LANDSCAPE); 
document.add(new Paragraph("Hello World!")); 
document.newPage() 

沒有必要旋轉圖像。如果您想在下一頁返回肖像,則只需在document.newPage()行之後使用setRotation(PdfPage.PORTRAIT);,如在的PageRotation示例中所做的那樣。

+0

謝謝我認爲這將工作,我會張貼代碼,如果我能得到它,真的很感謝精彩的細節。 – Rob

相關問題