HTML页面到PDF问题

时间:2013-01-08 21:25:05

标签: coldfusion cfdocument

我的项目是创建一个类似Vista的应用程序。我创建了一个非常基本的界面,可以在一个可以拖动的区域放置一个可调整大小的div。我也可以通过带有designmode的弹出式iframe将文本放入此div中。然后我将其写入数据库。 然后我调用这些数据并使用Coldfusions cfdocument创建一个pdf。

问题是,在创建PDF时,字体看起来稍微厚一些,并且自动换行与html页面界面不同,这非常重要。注意:单词换行由div的高度和宽度决定。它在cfdocument进程页面上看起来很好,它在创建pdf时就关闭了。任何人对此有任何想法或可以指出一些可能有帮助的信息?

提前致谢。

代码在这里:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<cfset webRes = "96">
<cfset pxlWidth = "921">
<cfset pxlHeight = "1178">
<cfset inWidth = (pxlWidth/webres)>
<cfset inHeight = (pxlHeight/webres)>

<cfquery name="qTextData" datasource="ds">
SELECT        DocID, TextID, Width, Height, PosX, PosY, FontFamily, FontColor, FontSize, TextValue
FROM            TextEditor
WHERE        ((DocID = #session.docid#))
</cfquery>


<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Create PDF</title>
</head>
<cfoutput>
<cfdocument filename="mypdf.pdf" name="mypdf" fontembed="yes" format="pdf" overwrite="yes" pageheight="#inHeight#" pagewidth="#inWidth#" pagetype="custom">
    <cfdocumentsection margintop="0" marginright="0" marginbottom="0" marginleft="0">
        <body align="center" marginheight="0" marginwidth="0">
            <div id="pageContainer" style="background-image:url(resources/image.caspx.jpg); background-repeat:no-repeat; height:#pxlHeight#px; width:#pxlWidth#px;">
                <cfloop query="qTextData">
                    <div id="divTextField_#TextID#" style="position:absolute; top:#PosY#px; left:#PosX#px; width:#width#px; height:#Height#px; color:#FontColor#; font-family:#FontFamily#; font-size:#FontSize#pt; vertical-align:text-top; line-spacing:normal;">
                        #TextValue#

                    </div>                  
                </cfloop>
            </div>
        </body>
    </cfdocumentsection>
</cfdocument>
</cfoutput>

<script type="text/javascript">
    window.open('http://linktopdf/mypdf.pdf','newWin','resizable=1');
</script>
</html>

1 个答案:

答案 0 :(得分:0)

我试着把它作为评论,但是我开始长时间啰嗦,它太大了,所以它可能不是“答案”,但如果没有别的,我肯定它会有一些有用的信息。

您查看的是什么百分比并尝试将其打印出来?

我注意到事情可能看起来不平常或比平时更大,因为它们只是在acrobat(或您选择的PDF查看器)中变得怪异。尝试调整缩放并查看显示是否更改,同时查看其是否正确打印。

我也发现像詹姆斯建议的那样,我需要特殊的css才能用于文档。 CSS可能与使div的一侧具有1px更大的边界以使其看起来正确一样奇怪。另请注意,虽然您在屏幕上查看PDF,但它仍然是"print"媒体。 PT意味着1/72英寸,当您从19英寸显示器(由像素分辨率进一步影响)缩放到8.5“x 11”的纸张时,它看起来会更大,而这种纸张并不真正知道像素是什么是。您可能需要尝试动态调整字体大小,例如:font-size: #fontSize-2#pt;。将-2更改为可能适用于您的输出的任何内容。您也可以尝试使用缩放的单位,例如em

cfdocument docs列出所有支持的CSS以及识别某些限制。似乎不支持line-spacing:normal;。还要确保所有CSS都包含在内联或样式标记中,但要避免使用链接的.css文件。我看到你正在这样做,只是添加提示和指针。

另外,根据文档:

  

ColdFusion不会返回HTML和CFML   <cfdocument></cfdocument>对。

这意味着ColdFusion正在处理您的cfset语句,但未返回

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Create PDF</title>
</head>

<script type="text/javascript">
    window.open('http://linktopdf/mypdf.pdf','newWin','resizable=1');
</script>
</html>

因此,iText可能无法像您期望的那样呈现它,因为

  1. 它没有doctype
  2. 这是一个格式错误的HTML文档