我發現瞭如何用drawText將文本寫入頁面,並使用drawPolygon將該多邊形顯示在正確的位置。用PDFBox將文本寫入ploygon
問題是,當我只是繪製文本的作品,但只要我畫多邊形,文本不再繪製。
如果我創建兩個PDPageContentStream對象(一個用於文本,另一個用於多邊形),則不再繪製多邊形。
這是我的測試類。任何PDF都應該做測試。
package ch.sertal.vision.server.helpers;
import ch.sertal.vision.BaseDaoTest;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.testng.annotations.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URISyntaxException;
/**
* Created by IntelliJ IDEA.
* User: micha.roon
* Date: 11/13/11
* Time: 11:22 PM
* To change this template use File | Settings | File Templates.
*/
public class WritePDFTest extends BaseDaoTest {
@Test
public void testTextPlacement() throws IOException, COSVisitorException, URISyntaxException {
File pdfFile = new File(this.getClass().getResource("/META-INF/menge-regierapport.pdf").toURI());
PDDocument doc = PDDocument.load(pdfFile);
PDPage page = null;
for (Object kid : doc.getDocumentCatalog().getPages().getKids()) {
if (kid instanceof PDPage) {
page = (PDPage) kid;
break;
}
}
PDPageContentStream rectContent = new PDPageContentStream(doc, page, true, false);
rectContent.setNonStrokingColor(Color.blue);
PDPageContentStream content = new PDPageContentStream(doc, page, true, false);
writeOnPage(content, String.valueOf(page.getArtBox().getHeight()), 0, 0);
writeOnPage(content, String.valueOf(page.getArtBox().getWidth()), 200, 100);
rectContent.fillRect(100, 200, 100, 50);
content.close();
doc.save(new FileOutputStream(
new File(this.getClass().getResource("/META-INF/menge-regierapport.pdf").toURI())));
doc.close();
}
void writeOnPage(PDPageContentStream content, String text, int x, int y) throws IOException {
content.beginText();
content.setFont(PDType1Font.HELVETICA, 10);
content.moveTextPositionByAmount(x, y);
content.drawString(text);
content.endText();
}
}
謝謝您的幫助
您似乎沒有關閉'rectContent'。 – mkl