我有一个程序,使用C#中的PDFsharp手动生成PDF.虽然它相当繁琐但我必须使用它并接近完成任务.只剩下一个问题.
问题:我想知道如何在Arial中找出给定字符大小的给定字符的宽度.
我无法想出更精确的文本包装方法.现在,一个以像素为单位定义框的宽度,然后继续在该框中写出一个字符串.我只是猜测可以装在盒子里的弦的最大长度,并且有时会出现一些视觉上的奇怪现象.
有帮助吗?
谢谢
我正在使用PDFSharp开展一个项目.可悲的是,作为VB.Net开发人员,他们提供的示例是用C#编写的.我遇到了检查变量是否存在的问题null.
在C#上,代码声明如下
PdfDictionary resources = page.Elements.GetDictionary("/Resources");
if (resources != null)
'do stuff here
Run Code Online (Sandbox Code Playgroud)
我有第二行的问题,
if(resources!= null)
到目前为止,这是我在VB上所做的,我也从sLaks 读过这个博客.
昏暗的资源如新的PdfDictionary?()
但它给了我一些错误.
简单地设置资源以nothing产生其默认值,可以是int,或者无论如何.我希望它与NULL进行比较.
这是完整的代码.
我正在编写一个 C# WPF 应用程序,我在其中插入一个“标题”页面作为一批 PDF 文档的第一页。标题页取自批处理中第一个 pdf 的第一页。
用户将启动此过程,但我想确保在以后用户无法再次运行此过程,这会导致插入另一个标题。
所以我的计划是获取标题页的 SHA256 哈希值,并将其与其他 pdf 的第一页的哈希值进行比较。如果它们匹配,则第一页与页眉页相同,否则我们插入页眉。
我敲了下面的代码来测试获取pdf中第一页的哈希值,但是每次运行时哈希值都不同。
为什么每次都不一样?
谢谢
using System.IO;
using System.Text;
using System.Security.Cryptography;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
namespace Syncada
{
public class PDFDoc
{
private PdfDocument pdfDoc;
public PDFDoc(string path)
{
pdfDoc = PdfReader.Open(path,PdfDocumentOpenMode.Import);
}
public string GetPageOneHash()
{
byte[] hash;
PdfPage page = pdfDoc.Pages[0];
using (MemoryStream stream = new MemoryStream())
{
PdfDocument doc = new PdfDocument();
doc.AddPage(page);
doc.Save(stream,false);
SHA256 sha256 = SHA256.Create();
hash = sha256.ComputeHash(stream);
}
StringBuilder sb = …Run Code Online (Sandbox Code Playgroud) 我正在使用 MigraDoc 创建 PDF。根据我的要求,我必须根据页面\部分的内容添加不同的标题。我可以通过添加新部分并为每个部分定义新标题来实现它。到这里为止,一切正常。
在页脚中,我使用“AddPageField”显示页码。但我意识到,每当新的部分开始时,页面字段都会重置为 1。页脚有什么方法可以继续所有部分的页数吗?
如果我在整个文档中仅使用一个部分,则页码将继续。但在这种情况下,我不能使用不同的标头。
我想将TableCell中的文本对齐以与单元格的底部对齐。我在表格单元属性的任何地方都没有看到此选项。这是构建该表的代码片段。
Table thirdTable = section.Headers.Primary.AddTable();
thirdTable.Format.Font.Size = "7pt";
column = thirdTable.AddColumn("1.5cm");
column.Format.Alignment = ParagraphAlignment.Center;
column = thirdTable.AddColumn("1cm");
column.Format.Alignment = ParagraphAlignment.Center;
column = thirdTable.AddColumn("7cm");
column.Format.Alignment = ParagraphAlignment.Left;
column = thirdTable.AddColumn("2.5cm");
column.Format.Alignment = ParagraphAlignment.Center;
column = thirdTable.AddColumn("1cm");
column.Format.Alignment = ParagraphAlignment.Center;
column = thirdTable.AddColumn("1.5cm");
column.Format.Alignment = ParagraphAlignment.Center;
column = thirdTable.AddColumn("1.5cm");
column.Format.Alignment = ParagraphAlignment.Center;
row = thirdTable.AddRow();
row = thirdTable.AddRow();
row.Cells[0].AddParagraph("Segment Code");
row.Cells[1].AddParagraph("Milepoint");
row.Cells[2].AddParagraph("Description of Milepoint");
row.Cells[3].AddParagraph("City Name");
row.Cells[4].AddParagraph("Segment Code");
row.Cells[5].AddParagraph("Milepoint");
row.Cells[6].AddParagraph("FA Route Number");
Run Code Online (Sandbox Code Playgroud) 在 Migradoc 和 PDFSharp 示例页面中,有一个将 Migradoc 文档绘制为 PDFSharp 文档:http://www.pdfsharp.net/wiki/MixMigraDocAndPdfSharp-sample.ashx
但是,如果我要渲染的 Migradoc 文档不止一页怎么办? 在 Migradoc 中,您不处理页面..它是自动完成的。
编辑:找到我的路
好吧,一旦你“ Prepare()”文档......你就有了FormattedDocument()方法,在那里你可以看到它最终有多少页。我在下面添加了我自己的回应。
我目前使用 MigraDoc 构建一个 PDF 文件,然后渲染创建 PdfDocument (PDFSharp) 的文档,以便我可以从其他 PDF 中添加外部页面(因为根据我的理解,MigraDoc 没有页面的“概念”,因此无法添加外部页面)页)
我当前的 PDF 文件格式是:
(PDFSharp) Page 1 ---
(PDFSharp) Page 2 | (MigraDoc) Section 1
(PDFSharp) Page 3 ---
(PDFSharp) Page 4 --- (MigraDoc) Section 2
(PDFSharp) Page 5 --- (MigraDoc) Section 2
(PDFSharp) Page 6 --- (MigraDoc) Section 3
(PDFSharp) External Page 1
(PDFSharp) External Page 2
(PDFSharp) External Page 3
(PDFSharp) External Page 4
Run Code Online (Sandbox Code Playgroud)
我需要有类似的东西:
(PDFSharp) Page 1 ---
(PDFSharp) Page 2 | (MigraDoc) Section 1
(PDFSharp) Page …Run Code Online (Sandbox Code Playgroud) 我需要找到一种方法,如何用.png图片填充整个封面页,并在页面的底部放置一些文本,图片不会.
现在我通过使用它来伸展它:
document.DefaultPageSetup.LeftMargin = 0;
document.DefaultPageSetup.TopMargin = 0;
Run Code Online (Sandbox Code Playgroud)
但是上边距仍然留下了som mm的空间(而不是顶部有一些白色的图片.)
PS将来我需要在封面图片上面放一张图片.所以它实际上必须是2层.有什么建议?
我目前正在使用PdfSharp创建一个PDF,它主要由文本和一些图像组成.文本元素具有不同的颜色.我的问题是,一旦我使用与我开始使用的颜色不同的颜色,文本在生成的PDF中不可见(例如,我以黑色文本开头,切换到红色文本,红色文本不可见).所有文本元素都在生成的PDF中(我可以选择它们),但红色元素是不可见的.
所以这是代码:
// Create a new PDF document with one page
var document = new PdfDocument();
var page = document.AddPage();
page.Width = 800;
page.Height = 600;
var defaultFont = new XFont("Arial", 12, XFontStyle.Regular, new XPdfFontOptions(PdfFontEmbedding.Always));
var gfx = XGraphics.FromPdfPage(page);
// black text
gfx.DrawString("black", defaultFont, XBrushes.Black, new XRect(x, y, width, height), XStringFormats.Center);
// red text
gfx.DrawString("red", defaultFont, XBrushes.Red, new XRect(x2, y2, width2, height2), XStringFormats.Center);
Run Code Online (Sandbox Code Playgroud)
我已经找到了一个解决方案(重新创建XGraphics对象),但它很安静,因为它需要在每次颜色更改后调用:
// ...
// black text
gfx.DrawString("black", defaultFont, XBrushes.Black, new XRect(x, y, width, height), XStringFormats.Center);
// disposing …Run Code Online (Sandbox Code Playgroud) 我正在使用PdfSharp并保存.png文件.它工作正常.现在我需要保存SVG图像,我收到一个错误
System.OutOfMemoryException: Out of memory.
Run Code Online (Sandbox Code Playgroud)
代码是
var path = @"D:\Projects\ProjectName\Content\Images\Instruments";
path += Path.GetFileName(instrument.Src); //instrument.src is a valid name and the path is a valid path on the local machine, which is where I'm testing
if (!File.Exists(path))
return; //never hit as the path is correct
var img = XImage.FromFile(path); //out of memory
//more code
Run Code Online (Sandbox Code Playgroud)
如果我将上面的.svg更改为.png它可以正常工作(因为我有两个,同名的.png和.svg文件)
如何使用PDF Sharp将SVG图像保存为PDF?