如何从字符串转换成pdf
本文关键字:pdf 转换 字符串 | 更新日期: 2023-09-27 17:50:21
目前我在asp.net c#中使用rest式服务,以下是我得到的 pdf
字符串返回,我想将其转换并保存为。 pdf
文件。我该怎么做呢?
static string HttpGet(string url)
{
HttpWebRequest req = WebRequest.Create(url)
as HttpWebRequest;
string result = null;
using (HttpWebResponse resp = req.GetResponse()
as HttpWebResponse)
{
StreamReader reader =
new StreamReader(resp.GetResponseStream());
result = reader.ReadToEnd();
}
return result;
}
/****************************** result returned ******************************/
%PDF-1.3
%����
3 0 obj
<<
/Linearized 1
/O 5
/H [ 526 186 ]
/L 47163
/E 46840
/N 1
/T 47053
>>
endobj
xref
3 11
0000000016 00000 n
0000000436 00000 n
0000000712 00000 n
0000000957 00000 n
0000001056 00000 n
0000001078 00000 n
0000046475 00000 n
0000046502 00000 n
0000046611 00000 n
0000046725 00000 n
0000000526 00000 n
trailer
<<
/Size 14
/Info 1 0 R
/Root 4 0 R
/Prev 47044
>>
startxref
0
%%EOF
4 0 obj
<<
/Type /Catalog
/Pages 2 0 R
>>
endobj
13 0 obj
<<
/Length 104
/P 0
/S 46
>>
stream
using (Stream stream = ... fetch the stream from somewhere)
{
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
File.WriteAllBytes("foo.pdf", buffer);
}
如果这个rest式服务使用HTTP,你可以使用WebClient:
using (var client = new WebClient())
{
client.DownloadFile("http://example.com/api", "foo.pdf");
}
我遇到了这种情况,我使用iTextSharp来生成pdf并保存在磁盘中。
public void GeneratePdf(string htmlPdf)
{
var pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
var htmlparser = new HTMLWorker(pdfDoc);
using (var memoryStream = new MemoryStream())
{
var writer = PdfWriter.GetInstance(pdfDoc, memoryStream);
pdfDoc.Open();
htmlparser.Parse(new StringReader(htmlPdf));
pdfDoc.Close();
byte[] bytes = memoryStream.ToArray();
File.WriteAllBytes(@"C:'file.pdf", bytes);
memoryStream.Close();
}
}
在我的情况下控制器获取PDF字节数组,这是保存在db。测试时,我试图使用System.Text.Encoding.UTF8.GetString(pdfByte)
转换得到
"%PDF-1.3% ' ' ' 30 obj...."
上述解决方案已实现,但下载后文件无法在"adobeacrobat"中打开。
相同的'pdfByte'我传递给下面的方法,pdf下载成功,并能够在' adobeacrobat '中打开。
我使用iTextSharp.LGPLv2。Core for DownloadPdfFile方法和DownloadPDF方法使用iTextSharp 5.5.13.3
private FileContentResult DownloadPDF(byte[] pdfByte, string fileName)
{
byte[] pdf;
using (var memoryStream = new MemoryStream())
{
using (PdfReader reader = new PdfReader(pdfByte))
{
var document = new Document(PageSize.A4, 50, 50, 60, 60);
PdfCopy copy = new PdfSmartCopy(document, memoryStream);
document.Open();
copy.AddDocument(reader);
reader.Close();
document.Close();
}
pdf = memoryStream.ToArray();
}
return File(pdf, "application/pdf", fileName + ".pdf");
}
Or
private FileContentResult DownloadPdfFile(byte[] pdfByte, string fileName)
{
byte[] pdf;
var memoryStream = new MemoryStream();
PdfReader reader = new PdfReader(pdfByte);
var document = new Document(PageSize.A4, 50, 50, 60, 60);
PdfCopy copy = new PdfSmartCopy(document, memoryStream);
document.Open();
for (int pagenumber = 1; pagenumber <= reader.NumberOfPages; pagenumber++)
{
copy.AddPage(copy.GetImportedPage(reader, pagenumber));
}
reader.Close();
document.Close();
pdf = memoryStream.ToArray();
memoryStream.Close();
return File(pdf, "application/pdf", fileName + ".pdf");
}