【问题标题】:Aspose.Pdf.TextStamp overlaps with the previously added text. How is it possible to prevent this?Aspose.Pdf.TextStamp 与之前添加的文本重叠。如何防止这种情况发生?
【发布时间】:2020-04-26 05:26:05
【问题描述】:

Aspose.Pdf.TextStamp 与之前添加的文本重叠。如何防止这种情况发生?

这是我用来准备文档的代码:

 StringBuilder htmlPage = new StringBuilder();
 //put here the html from https://pastebin.com/c6Hu4nV5 
 //instead of the `text foo`
 htmlPage.Append("text foo"); 
 byte[] bytes = Encoding.UTF8.GetBytes(htmlPage.ToString());
 var streamHtml = new MemoryStream(bytes)
 var objLoadOptions = new Aspose.Pdf.HtmlLoadOptions(0, 50, 0, 0);
 var doc = new Aspose.Pdf.Document(streamHtml, objLoadOptions);

这是我用于添加页码(在我的上下文中是图章)的代码:

foreach (var page in doc.Pages)
{
    Aspose.Pdf.Facades.FormattedText formattedText = new Aspose.Pdf.Facades.FormattedText(idAndVersion + page.Number + "-" + doc.Pages.Count,
                            Color.Black, Aspose.Pdf.Facades.FontStyle.Helvetica, Aspose.Pdf.Facades.EncodingType.Identity_h,
                            true, 12F);
    var textStamp = new Aspose.Pdf.TextStamp(formattedText)
    {
        VerticalAlignment = Aspose.Pdf.VerticalAlignment.Bottom,
        HorizontalAlignment = Aspose.Pdf.HorizontalAlignment.Left,
        LeftMargin = 50,
        BottomMargin = 20
    };
    page.AddStamp(textStamp);
}

我使用邮票作为添加页码的一种方式。也许有更好的方法来做到这一点?

我试图找到比here 更好的方法,但没有成功。

添加页码后,我要做的是:

using (var streamPdf = new MemoryStream())
{
    doc.Save(streamPdf, Aspose.Pdf.SaveFormat.Pdf);
    return streamPdf.GetBuffer();
}

【问题讨论】:

  • 您能否通过将其上传到 Google Drive 或 Dropbox 来分享您尝试添加文本图章的 PDF 文档。我们将在我们的环境中测试该场景并相应地解决它。我是 Asad Ali,在 Aspose 担任开发人员宣传员。
  • @AsadAli,如上所示,我正在生成文件内容并在运行时创建文件。这意味着当与 pdf 生成相关的代码开始执行时,我没有文件。要不要我给你提供htmlPage变量的字符串内容?
  • @AsadAli,我在上面更新了我的问题。我相信现在您应该能够轻松地重现该问题。如果您需要我提供任何其他帮助,请告诉我。

标签: .net pdf constructor pagination aspose


【解决方案1】:

您可以使用HtmlLoadOptions.PageInfo.Margin 属性设置PDF 页边距。以下代码 sn -p 生成一个 PDF 文档,该文档设置了页边距,并且文本戳不与页面的其余内容重叠。

StringBuilder htmlPage = new StringBuilder();
htmlPage.Append(File.ReadAllText(dataDir + "foo.html"));
byte[] bytes = Encoding.UTF8.GetBytes(htmlPage.ToString());
var streamHtml = new MemoryStream(bytes);
var objLoadOptions = new Aspose.Pdf.HtmlLoadOptions();
// Set Page Margins
objLoadOptions.PageInfo.Margin = new MarginInfo(50, 50, 50, 50);
// You can also set Page Height/Widht
//objLoadOptions.PageInfo.Height = 898;
//objLoadOptions.PageInfo.Widht = 550;
var doc = new Aspose.Pdf.Document(streamHtml, objLoadOptions);

foreach (var page in doc.Pages)
{
 Aspose.Pdf.Facades.FormattedText formattedText = new Aspose.Pdf.Facades.FormattedText(page.Number + "-" + doc.Pages.Count,
                                        new Aspose.Pdf.Facades.FontColor(0, 0, 0) , Aspose.Pdf.Facades.FontStyle.Helvetica, Aspose.Pdf.Facades.EncodingType.Identity_h,
                                        true, 12F);
 var textStamp = new Aspose.Pdf.TextStamp(formattedText)
 {
  VerticalAlignment = Aspose.Pdf.VerticalAlignment.Bottom,
  HorizontalAlignment = Aspose.Pdf.HorizontalAlignment.Left,
  LeftMargin = 50,
  BottomMargin = 20
 };
 page.AddStamp(textStamp);
}

doc.Save(dataDir + "out20.1.pdf");

您还可以根据您的要求在上面的代码 sn-p 中指定页面高度/宽度。相关代码行有注释,可以注意。如果您仍然遇到任何问题,请随时告诉我们。

【讨论】:

  • 感谢您的回答。在您的代码中,您添加所有边距(顶部、右侧、底部和左侧)。我需要的只是一个底部边距。如果您尝试仅添加底部边距 (MarginInfo(0, 50, 0, 0)),那么您将看到底部边距将仅应用于第一页。此外,我更新了添加页面后的操作。也许这会导致问题?
  • 你还在吗? :)
  • 抱歉延迟回复。我们已经能够注意到边距仅适用于 PDF 文档的第一页而仅指定为底部的问题。为了更正,我们在问题跟踪系统中将其记录为 PDFNET-47564。我们一定会调查它的细节并在解决后立即通知您。对于给您带来的不便,我们深表歉意。
  • 感谢您的帮助。我会等待修复。
猜你喜欢
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多