我正在使用iTextSharp创建发票.这显示很好,但有时,当发票项目的数量较大时,汇总部分(显示小计,税,折扣,总计等)将被拆分.一些显示在当前页面中,一些显示在下一页.我想将整个摘要部分移到下一页,如果剩下的当前高度还不够.
但是,要做到这一点,我需要知道剩余多少页面高度(在我当前的页面内容渲染之后).我想知道是否有人知道如何计算页面的当前左高度?或者,如果pdfPTable中有一个属性,可能会强制表格作为一个整体打印出来,不要让它分割成多个页面!我想如果第二个选项可用,那将很容易.
总之,我需要知道是否可以计算剩余页面高度,以及是否可以强制表格不分割在多个页面上.
谢谢.Sameers
我想在证书库中签署带有证书的PDF.
我使用iTextSharp和iSafePDF来播放PDF,当我使用存储为.p12文件的证书进行签名时,它可以正常工作.但我不知道如何使用库来签署从证书存储区获得的证书.我有一个System.Security.Cryptography.X509Certificate2的实例,但该库使用不同的对象表示,我无法使其工作.有人可以帮忙吗?
我尝试了几种方法来做到这一点,但仍然无法得到它.似乎iTextSharp需要2遍情况,以便图像出现在文本的顶部.所以我试图使用内存流来做到这一点,但我一直在收到错误.
Public Function createDoc(ByRef reqResponse As HttpResponse) As Boolean
Dim m As System.IO.MemoryStream = New System.IO.MemoryStream()
Dim document As Document = New Document()
Dim writer As PdfWriter = iTextSharp.text.pdf.PdfWriter.GetInstance(document, m)
document.Open()
document.Add(New Paragraph(DateTime.Now.ToString()))
document.Add(New Paragraph(DateTime.Now.ToString()))
document.Add(New Paragraph(DateTime.Now.ToString()))
document.Add(New Paragraph(DateTime.Now.ToString()))
document.Add(New Paragraph(DateTime.Now.ToString()))
document.Add(New Paragraph(DateTime.Now.ToString()))
document.Add(New Paragraph(DateTime.Now.ToString()))
document.Close()
writer.Flush()
writer.Flush()
'yes; I get the pdf if this is the last statement
'reqResponse.OutputStream.Write(m.GetBuffer(), 0, m.GetBuffer().Length)
'this statment does not work it says the stream is closed
'm.Position = 0
Dim Reader As PdfReader …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用iTextSharp填写AcroForm的文本字段.Acroform文本字段也是由iTextSharp通过这段代码创建的:
TextField Field = new TextField(OutputWriter, FieldPos, "MyField");
OutputWriter.AddAnnotation(Field.GetTextField()); // OutputWriter is writing to form.pdf
Run Code Online (Sandbox Code Playgroud)
我使用以下代码填写表单:
PdfReader reader = new PdfReader("form.pdf");
PdfStamper filledOutForm = new PdfStamper(reader, new FileStream("filled_form.pdf", FileMode.Create));
AcroFields form = filledOutForm.AcroFields;
form.SetField("MyField", "some unicode data");
Run Code Online (Sandbox Code Playgroud)
但是,当我在Acrobat Reader中打开filled_form.pdf时,除非我手动编辑字段(例如,我手工将字符附加到字段),否则unicode字符不可见.
我也尝试通过以下方式设置字段的字体:
BaseFont fieldFontRoman = BaseFont.CreateFont(@"C:\Windows\Fonts\times.ttf",
BaseFont.IDENTITY_H,
BaseFont.EMBEDDED);
form.SetFieldProperty("MyField", "textfont", fieldFontRoman, null);
Run Code Online (Sandbox Code Playgroud)
然后,当我在Acrobat Reader中打开filled_form.pdf时,除非我手动编辑该字段,否则一切看起来都很好.之后,非unicode字符消失(它们变为空格).他们在这里是因为如果我通过CTRL + C复制字段的整个内容并将其粘贴到记事本,我可以看到所有字符.
请指教.我希望看到该字段中的所有字符,而无需手动编辑字段,当然在手动编辑后我希望没有字符消失.
谢谢
如何在ASP.Net上使用iTextSharp创建后打开PDF文件?我不想将其保存在服务器上,但是直接在生成新PDF时,它会在浏览器上显示.有可能吗?
这是我的意思的例子:点击这里.但是在这个例子中,文件直接下载.
我怎样才能做到这一点?
Dim doc1 = New Document()
'use a variable to let my code fit across the page...
Dim path As String = Server.MapPath("PDFs")
PdfWriter.GetInstance(doc1, New FileStream(path & "/Doc1.pdf", FileMode.Create))
doc1.Open()
doc1.Add(New Paragraph("My first PDF"))
doc1.Close()
Run Code Online (Sandbox Code Playgroud)
上面的代码确实将PDF保存到服务器.
非常感谢你提前!:)
我有一个视图,它返回一个包含多个页面的pdf(使用iTextSharp),但现在我必须更改它,以便每个页面都是一个单独的pdf(带有它自己的唯一标题)并返回一个zip文件.
我的原始代码如下所示:
public FileStreamResult DownloadPDF()
{
MemoryStream workStream = new MemoryStream();
Document document = new Document();
PdfWriter.GetInstance(document, workStream).CloseStream = false;
document.Open();
// Populate pdf items
document.Close();
byte[] byteInfo = workStream.ToArray();
workStream.Write(byteInfo, 0, byteInfo.Length);
workStream.Position = 0;
FileStreamResult fileResult = new FileStreamResult(workStream, "application/pdf");
fileResult.FileDownloadName = "fileName";
return fileResult;
}
Run Code Online (Sandbox Code Playgroud)
使用gzip压缩文件看起来很简单,但我不知道如何gzip多个文件并将其作为一个zip文件返回.或者我应该使用gzip以外的东西,比如dotnetzip或sharpzip?
提前致谢!
我有包含一些英文字符和一些中文字符的字符串数据。我正在使用iTextSharp使用此数据创建pdf文件。创建pdf文件后,当我打开它时,pdf仅包含英文字符。它没有显示汉字。您能告诉我如何在pdf文件中显示汉字吗?请注意,即时通讯写入pdf的字符串数据包含动态语言字符,例如,有时是英语,有些是中文,有时是日语等。
我正在ASP.Net应用程序中动态创建PDF文件.数据可以从跨页1页到超过10页不等.我正在使用PdpfTables和Cells来对齐完美运行的数据.IT正在创建需要新页面的页面.唯一的问题是我无法将它添加到所有页面,只有第一页.
我的模板是一个1页的PDF文件.要将它添加到第一页,我使用以下代码
PdfContentByte cb = writer.DirectContent;
cb.AddTemplate(page, 0, 0);
Run Code Online (Sandbox Code Playgroud)
正如我所说,这适用于第一页很好,但之后没有任何页面.所以我尝试在关闭所有流之前添加以下代码,但它什么也没做
for (var i = 2; i <= writer.CurrentPageNumber; i++)
{
var y = (writer.PageSize.Height * (i - 1));
cb.AddTemplate(page, 0, y);
}
Run Code Online (Sandbox Code Playgroud)
我确实没有在网上找到任何与我的问题完全相关的内容,但那些相似的问题并没有帮助.
任何建议都会很棒,谢谢.
我正在编写一个Web应用程序,它在PDF的每个页面的顶部提取一行.PDF来自产品的不同版本,可以通过许多PDF打印机,也可以使用不同的版本和不同的设置.
到目前为止,使用PDFSharp和iTextSharp我已经设法让它适用于所有版本的PDF.我的挂机是带有CID字体的文件(Identity-H).
我编写了一个部分解析器来查找字体表引用和文本块,但将这些转换为可读文本正在打败我.
有没有人有: - 一个解决CID字体的解析器(像这一个/sf/answers/121258581/); 或 - 一些示例代码,用于解析页面资源字典以查找页面字体并获取其ToUnicode流以帮助完成此示例(/sf/answers/283382991/)
我们必须使用iTextSharp 4.1来保留免费使用许可.
这是我的部分解析器.
public string ExtractTextFromCIDPDFBytes(byte[] input)
{
if (input == null || input.Length == 0) return "";
try
{
// Holds the final result to be returned
string resultString = "";
// Are we in a block of text or not
bool blnInText = false;
// Holds each line of text before written to resultString
string phrase = "";
// Holds the 4-character hex codes as …Run Code Online (Sandbox Code Playgroud) 所有,
我创建了以下方法来获取具有多个tiff页面文档的tiff字节数组
我需要将其转换为pdf,然后返回一个pdf字节数组
我有这个代码1的 2个问题 - 我想返回一个字节[].2 - 生成的pdf重复页面.
public void convertImage(byte[] documentContent)
{
Document document = new Document(PageSize.LETTER, 0, 0, 0, 0);
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(@"C:\Data\Output.pdf", FileMode.Create)); --for testing purposes
Bitmap oldImage;
using (var ms = new MemoryStream(documentContent))
{
oldImage = new Bitmap(ms);
}
Size newSize = new Size(1024, 737);
using (Bitmap bmp1 = new Bitmap(oldImage, newSize))
{
int total = oldImage.GetFrameCount(FrameDimension.Page);
document.Open();
PdfContentByte cb = writer.DirectContent;
for (int k = 0; k < total; ++k) …Run Code Online (Sandbox Code Playgroud)