【发布时间】:2021-11-11 14:01:14
【问题描述】:
我正在尝试将 html 转换为具有相对路径的图像标签的 pdf。
<IMG src="./ups_logo.gif" ALT="UPS Logo">
这是我从 API 获得的动态 HTML。
当我像这样使用 HTMLConverter 将其转换为 PDF 时:
string htmlString = "<!DOCTYPE HTML PUBLIC \" -//W3C//DTD HTML 4.0 Transitional//EN\"><HTML><HEAD><META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=ISO-8859-1\"><TITLE>UPS Package Tracking</TITLE></HEAD><BODY><TABLE width=500 border=0 cellSpacing=0 cellPadding=0><TR><TD rowspan=\"30\" Width=\"17\"> </TD><TD><TABLE cellSpacing=0 cellPadding=0 border=0 ><TR><TD align=\"left\" width=\"30\" > <IMG src=\"./ups_logo.gif\" ALT=\"UPS Logo\"></TD><TD><IMG src=\"./ups_banner.gif\" ALT=\"UPS Banner\" ></TD></TR></TABLE></TD></TR><TR><TD><TABLE cellSpacing=0 cellPadding=0 width=500 border=0 ><TR><TD colSpan=2 align=left><B>DELIVERY NOTIFICATION</B></TD><TD></TD></TR><TR><TD> </TD></TR><TR><TD colSpan=2>Dear Customer,</TD></TR><TR><TD> </TD></TR><TR><TD colSpan=3>This is in response to your request for delivery information concerning the shipment listed below.</TD></TR><TR><TD> </TD></TR><TR><TD align=right>Tracking Number: </TD><TD align=left>XX XXX XXX XX XXXX XXX X</TD></TR><TR><TD valign=top align=right><nobr> Reference Number(s): </nobr></TD><TD align=left><Table cellSpacing=0 cellPadding=0 width = 65%><TR><TD>XXXXXXXXXXXXXXXXX, XXXX, XXXXXXXXXXXXXXXXX, XXXXX5 </TD></TR></TABLE></TD></TR><TR><TD align=right>Service Type: </TD><TD align=left>UPS GROUND</TD></TR><TR><TD align=right>Package Weight: </TD><TD align=left>7.00 LBS</TD></TR><TR><TD align=right>Shipped or Billed on: </TD><TD align=left>Sep 01, 2021</TD></TR><TR><TD> </TD><TD> </TD></TR><TR><TD align=right valign=top>Delivered on: </TD><TD align=left>Sep 07, 2021 3:10 P.M.</TD></TR><TR><TD align=right valign=top>Delivered to: </TD><TD align=left>York, NY, US, 11111</TD></TR><TR><TD align=right>Signed By: </TD><TD align=left>AngryOtter</TD></TR><TR><TD align=right>Location: </TD><TD align=left>Receiver</TD></TR><TR><TD> </TD><TD> </TD></TR><TR><TD> </TD><TD> </TD></TR> <TR><TD colSpan=2>Thank you for giving us this opportunity to serve you.</TD></TR><TR><TD> </TD></TR> <TR><TD>Sincerely,</TD></TR> <TR><TD>United Parcel Service</TD></TR><TR><TD> </TD><TD> </TD></TR><TR><TD colSpan=2>Tracking results provided by UPS: Sep 16, 2021 2:02 P.M. Eastern Time (USA)</TD></TR></TABLE></TD></TR></TABLE></BODY></HTML>";
byte[] pdfData;
using (var memoryStream = new MemoryStream())
{
ConverterProperties properties = new ConverterProperties();
properties.SetBaseUri("../img/");
HtmlConverter.ConvertToPdf(htmlString, memoryStream,properties);
pdfData = memoryStream.ToArray();
}
File.WriteAllBytes("c:\\test.pdf", pdfData);
其他一切都显示得很好,我生成了 PDF,所有信息都在那里,但图像没有显示。它也没有坏,只是不在那里。也不例外。图片的源文件目前在项目的解决方案级别。
文件结构:
Desktop
--TrackWSSample
--.sln
--.suo
--img(folder)
--ups_logo.gif
--TrackWSSample
--app.config
--package.config
--program.cs
编辑:我的请求/响应代码:
TrackService track = new TrackService();
TrackRequest tr = new TrackRequest();
UPSSecurity upss = new UPSSecurity();
UPSSecurityServiceAccessToken upssSvcAccessToken = new UPSSecurityServiceAccessToken();
upssSvcAccessToken.AccessLicenseNumber = "my_number";
upss.ServiceAccessToken = upssSvcAccessToken;
UPSSecurityUsernameToken upssUsrNameToken = new UPSSecurityUsernameToken();
upssUsrNameToken.Username = "userName";
upssUsrNameToken.Password = "Password";
upss.UsernameToken = upssUsrNameToken;
track.UPSSecurityValue = upss;
RequestType request = new RequestType();
string[] requestOption = { "14" };
request.RequestOption = requestOption;
tr.Request = request;
tr.InquiryNumber = "my_tracking_number";
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Tls11; //This line will ensure the latest security protocol for consuming the web service call.
TrackResponse trackResponse = track.ProcessTrack(tr);
string s = trackResponse.Shipment[0].Package[0].Activity[0].Document[0].Content;
byte[] htmlBytes = Convert.FromBase64String(s);
string htmlString = Encoding.UTF8.GetString(htmlBytes);
感谢任何帮助
【问题讨论】:
-
@KJ 不,我什至硬编码了图像的绝对路径,仍然没有工作
-
@KJ gif 仍然不存在,即使我将 url 设置为
"./img/"。绝对不需要路径,因为 prod 环境将具有不同的路径。但是,当我做properties.SetBaseUri("C:/Users/User Name/Desktop/TrackWSSample/img");时,即使这样也不起作用 -
能否添加发送/接收请求的代码以便我进行测试?显然,用通用数据替换您的用户名、密码和 AccessLicenseNumber。 (例如:my_username、my_password、my_access_license_number)。
-
@user9938 添加,和UPS提供的示例代码差别不大。
标签: c# itext pdf-generation itext7