gpt4 book ai didi

java - itext 5.5 纵向方向无法在新页面上工作

转载 作者:行者123 更新时间:2023-12-01 12:54:37 25 4
gpt4 key购买 nike

我为带有表格的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com