我发现了如何使用 drawText 将文本写入页面,并且多边形使用 drawPolygon 出现在正确的位置。
问题是,当我只绘制文本时它可以工作,但是一旦我绘制多边形,文本就不再绘制了。
如果我创建两个 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();
}
}
谢谢您的帮助