C# HTML转PDF 页面内容太大怎么分页?

salim890809 2011-06-16 04:37:29
public void writeLog(string sMessage)
{
//FileStream fs = new FileStream(Server.MapPath("pagetohtml.htm"), FileMode.Append);
try
{
StreamWriter swriter = File.CreateText(Server.MapPath("pagetohtml.htm"));
swriter.WriteLine(sMessage);
swriter.Close();
}
catch
{ }
}

private System.Drawing.Bitmap bitmap;
private string url;
private int w = 760, h = 900;

public void setBitmap()
{
using (WebBrowser wb = new WebBrowser())
{
wb.Width = w;
wb.Height = h;
wb.ScrollBarsEnabled = false;
wb.Navigate(url);
//确保页面被解析完全
while (wb.ReadyState != WebBrowserReadyState.Complete)
{
System.Windows.Forms.Application.DoEvents();
}
bitmap = new System.Drawing.Bitmap(w, h);
wb.DrawToBitmap(bitmap, new System.Drawing.Rectangle(0, 0, w, h));
wb.Dispose();
}
}

private void CreatPdf()
{
Document doc = new Document(PageSize.A4, 9, 18, 36, 36);//左右上下
MemoryStream ms = new MemoryStream();
try
{
PdfWriter writer = PdfWriter.GetInstance(doc, ms);
writer.CloseStream = false;
doc.Open();
url = Server.MapPath("pagetohtml.htm");
Thread thread = new Thread(new ThreadStart(setBitmap));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
while (thread.IsAlive)
Thread.Sleep(100);
bitmap.Save(Server.MapPath("pagetohtml.bmp"));

iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(bitmap, System.Drawing.Imaging.ImageFormat.Bmp);
img.ScalePercent(75);//560 630
doc.Add(img);
}
catch (Exception err)
{
throw new Exception(err.Message);
}
finally
{
doc.Close();
using (FileStream fs = new FileStream(Server.MapPath("pagetohtml.pdf"), FileMode.Create))
{
ms.Position = 0;
byte[] bit = new byte[ms.Length];
ms.Read(bit, 0, (int)ms.Length);
fs.Write(bit, 0, bit.Length);
}
ViewPdf(ms);
}
}

private void ViewPdf(Stream fs)
{
Response.Clear();
//中文名的话
//Response.AppendHeader("Content-Disposition", "attachment;filename=" +
// HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + ";charset=GB2312");
Response.AddHeader("Content-Disposition", "attachment;FileName=pagetohtml.pdf");
Response.AddHeader("Content-Length", fs.Length.ToString());
Response.ContentType = "application/pdf";
long fileLength = fs.Length;
int size = 10240;
byte[] readData = new byte[size];
if (size > fileLength)
size = Convert.ToInt32(fileLength);
long fPos = 0;
bool isEnd = false;
while (!isEnd)
{
if ((fPos + size) >= fileLength)
{
size = Convert.ToInt32(fileLength - fPos);
isEnd = true;
}
readData = new byte[size];
fs.Position = fPos;
fs.Read(readData, 0, size);
Response.BinaryWrite(readData);
Response.OutputStream.Flush();
fPos += size;
}
fs.Close();
Response.OutputStream.Close();
Response.End();
Response.Close();
}
...全文
1704 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hu1003938819 2013-02-04
  • 打赏
  • 举报
回复
也不是发布后,就是运行的时候就有那个问题
hu1003938819 2013-02-04
  • 打赏
  • 举报
回复
请问楼主你的那个方法发布后没有问题吗? 我也是那样写的,发布后有个问题,就是那个exe文件一直重复不断的执行,一直在生成pdf文件,生成了好多
yehdTwo 2013-02-02
  • 打赏
  • 举报
回复
wkhtmltopdf.exe这个不支持中文入径的!
gv1012137358 2012-02-06
  • 打赏
  • 举报
回复
salim890809,你的QQ需要验证,我想要wkhtmltopdf.exe 这个文件,能否传一个给我
我的QQ是1012137358
salim890809 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jin225 的回复:]

有直接转换的啊

我都是用iTextSharp
一个一个对象创建的
[/Quote]

string text = "啊大分会垃圾筐和发动机哈即可返回了金卡回复哈开发和啊回复金卡了和啊飞啊大分会垃圾筐和发动" +
"机哈即可返回了金卡回复哈开发和啊回复金卡了和啊飞啊大分会垃圾筐和发动机哈即可返回了金卡回复哈开发和啊回" +
"复金卡了和啊飞啊大分会垃圾筐和发动机哈即可返回了金卡回复哈开发和啊回复金卡了和垃圾筐和发动机哈即可返" +
"回了金卡回复哈开发和啊回复金卡了和啊飞啊大分会垃圾筐和发动机哈即可返回了金卡回复哈开发和啊回复金卡了和" +
"啊飞啊大分会垃圾筐和发动机哈即可返回了金卡回复哈开发和啊回复金卡了和啊飞啊大分会垃圾筐和发动机哈即可返回" +
"了金卡回复哈开发和啊回复金卡了和啊飞啊大分会垃圾筐和发动机哈即可返回了金卡回复哈开发和啊回复金卡了和啊飞";

try
{
Document doc = new Document(PageSize.A4);

//写实例
PdfWriter.GetInstance(doc, new FileStream("chap01.pdf", FileMode.Create));
//打开document
doc.Open();

//载入字体
BaseFont baseFont = BaseFont.CreateFont(
"C:\\WINDOWS\\FONTS\\SIMHEI.TTF", //黑体
BaseFont.IDENTITY_H, //横向字体
BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont, 9);

//写入一个段落, Paragraph
doc.Add(new Paragraph("<html><body><div style=\"width: 800px; text-align: center; background-color: White;\">" + text + "</div></body></html>", font));
//关闭document
doc.Close();
//打开PDF,看效果
Process.Start("chap01.pdf");
}
catch (Exception)
{
}

你这样样式是放不上去的!我早就试过了
jin225 2011-06-17
  • 打赏
  • 举报
回复
有直接转换的啊

我都是用iTextSharp
一个一个对象创建的
ZhuZhuYuXiang 2011-06-17
  • 打赏
  • 举报
回复
我也在处理这个问题,期待高手!
Lisliefor 2011-06-17
  • 打赏
  • 举报
回复
salim890809 2011-06-17
  • 打赏
  • 举报
回复

大哥些,能不能给个好的解决办法啊!
salim890809 2011-06-17
  • 打赏
  • 举报
回复
怎么就没有一个好一点的答案哦!愁!!!
salim890809 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhensoft163 的回复:]

你可以在后台提取数据再导出pdf格式啊。
[/Quote]
HTML页面,你跟我说怎么提取数据?又不是集合。。。
那么多标签,又不是统一的,怎么好提取?你给我看个例子?
salim890809 2011-06-17
  • 打赏
  • 举报
回复
找到HTML转PDF的方法了,在次共享给大家看看
public static bool HtmlToPdf(string url, string path)
{
try
{
if (string.IsNullOrEmpty(url) || string.IsNullOrEmpty(path))
return false;
Process p = new Process();
string str = System.Web.HttpContext.Current.Server.MapPath("wkhtmltopdf.exe");
if (!System.IO.File.Exists(str))
return false;
p.StartInfo.FileName = str;
p.StartInfo.Arguments = " \"" + url + "\" " + path;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
System.Threading.Thread.Sleep(500);

return true;
}
catch (Exception ex)
{
HttpContext.Current.Response.Write(ex);
}
return false;
}

不过这个需要以个.exe文件,如果需要这个.exe文件的请联系我QQ 49987819
salim890809 2011-06-17
  • 打赏
  • 举报
回复
或者那位大哥有HTML转PPT的代码,共享下哦!一段HTML代码转换成PPT,分页什么的,还要控制文本太大,进行处理。。。。网上的都不满足我这要求啊。。。
zhensoft163 2011-06-16
  • 打赏
  • 举报
回复
你可以在后台提取数据再导出pdf格式啊。
salim890809 2011-06-16
  • 打赏
  • 举报
回复
我知道是个收费的啊。。。
porschev 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 salim890809 的回复:]

谁有abcPDF.dll共享个给我哦,哎,我看网上那个说可以完成的!
[/Quote]

这是个收费组件。。
salim890809 2011-06-16
  • 打赏
  • 举报
回复
谁有abcPDF.dll共享个给我哦,哎,我看网上那个说可以完成的!
salim890809 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wxr0323 的回复:]

把PDF分割 导出多个PDF

然后把这多个PDF 用分页控件分页了。。。

PDF内置分页.NET不知道能不能做出来。
[/Quote]

可是一个页面就咋导成多个PDF哦,我图片就一张额,如果说转成多张图片,然后根据图片来分页,
虽然是这么想的,但是不知道咋弄啊!也不知道.net可不可以实现!
子夜__ 2011-06-16
  • 打赏
  • 举报
回复
把PDF分割 导出多个PDF

然后把这多个PDF 用分页控件分页了。。。

PDF内置分页.NET不知道能不能做出来。
salim890809 2011-06-16
  • 打赏
  • 举报
回复
如果“pagetohtml.htm”中的内容太大,那么就只是会显示一页!有没有其他的办法,我看了好多先导成word
然后再转PDF的,不是我想要的。我用图片转吧,图片大小就那么大,不知道咋搞分页了,请高手帮帮忙啊

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧