我为带有表格的 HTML
文件运行以下代码。
我能够将首页的 HTML
转换为 PDF
,四边都有边距。
但正如我所做的那样 document.newPage();
并应用 document.setPageSize();
它不起作用。不存在边距。
PDF
无边框,没有边距。
请指导。
代码:
public class Potrait_ParseHtmlObjects {
public static final String HTML = "C:/h.html";
public static final String DEST = "C:/test33.pdf";
public void createPdf(String file) {
// Parse HTML into Element list
try{
XMLWorkerHelper helper = XMLWorkerHelper.getInstance();
// CSS
CSSResolver cssResolver = helper.getDefaultCssResolver(true);
CssFile cssFile = helper.getCSS(new FileInputStream("D:\\Itext_Test\\Test\\src\\test.css"));
cssResolver.addCss(cssFile);
// HTML
HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
htmlContext.autoBookmark(false);
//mycode starts
FontFactory.registerDirectories();
//mycode ends
// Pipelines
ElementList elements = new ElementList();
ElementHandlerPipeline end = new ElementHandlerPipeline(elements, null);
HtmlPipeline html = new HtmlPipeline(htmlContext, end);
CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
// XML Worker
XMLWorker worker = new XMLWorker(css, true);
XMLParser p = new XMLParser(worker);
//mycode starts
p.parse(new FileInputStream(HTML),Charset.forName("UTF-8"));//changed for Charset Encoding
// step 1
Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
writer.setInitialLeading(12.5f);
// step 3
document.open();
// step 4
Rectangle left = new Rectangle(33,33,550,770);
document.setPageSize(left);
System.out.println("1"+document.getPageSize());
ColumnText column = new ColumnText(writer.getDirectContent());
column.setSimpleColumn(left);
int runDirection = PdfWriter.RUN_DIRECTION_LTR;
column.setRunDirection(runDirection);
int status = ColumnText.START_COLUMN;
for (Element e : elements) {
if (e instanceof PdfPTable) {
PdfPTable table = (PdfPTable) e;
for (PdfPRow row : table.getRows()) {
for (PdfPCell cell : row.getCells()) {
if(cell!=null)
cell.setRunDirection(runDirection);
}
}
}
if (ColumnText.isAllowedElement(e)) {
column.addElement(e);
status = column.go();
while (ColumnText.hasMoreText(status)) {
Rectangle left1 = new Rectangle(50,50,500,700);
document.newPage();
document.setPageSize(left1);
column.setSimpleColumn(left1);
status = column.go();
}
}
}
// step 5
document.close();
}catch(Exception ex)
{ex.printStackTrace();}
}
/**
* Main method
*/
public static void main(String[] args) throws IOException, DocumentException {
File file = new File(DEST);
file.getParentFile().mkdirs();
new Potrait_ParseHtmlObjects().createPdf(DEST);
}
}
最佳答案
在执行 document.newPage()
时会初始化所有页面参数,因此在触发 document 后更改页面大小或边距没有任何意义。 newPage()。如果您想要不同的页面大小(或方向或边距),则需要在调用
之前)。document.newPage()
之前设置页面大小、方向和边距的值(如果您想更改第一页,则在 document.open()
例如:在您的情况下,您应该像这样创建文档:
Document document = new Document(new Rectangle(33,33,550,770));
您应该像这样更改页面大小:
document.setPageSize(left1);
document.newPage();
column.setSimpleColumn(left1);
您没有任何边距,因为您对页面大小和列使用相同的矩形
。您正在创建一个 PDF,其左下角坐标不等于 (0, 0)
。这并不违法,但很不寻常。我的猜测是你想做这样的事情:
document.setPageSize(new Rectangle(0, 0, 550, 750););
document.newPage();
column.setSimpleColumn(new Rectangle(50,50,500,700));
这将导致页面尺寸为 7.64 x 10.42 英寸(550 x 750 pt),页边距为 0 每边 69 英寸(50 磅)。
关于java - itext 5.5 纵向方向无法在新页面上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23992797/