根据这些出色的 stackoverflow 资源,我一直在从一些 HTML 构建一个 word 文档:
对于那些即将尝试它的人,请为自己的一些痛苦做好准备,因为 Word 在它使用的 CSS 方面至少可以说是不完整的。如果你想要列,你真的需要回到使用表格来布置东西。
我在正确调整图像大小时遇到问题 -用户上传的图像将在此 Word 文档中使用,我想根据“高度”属性调整它们的大小- 高度为 50 像素然后相应地缩放宽度。
似乎没有关于如何在网络上的任何地方执行此操作的文档。
我还使用了一些 html2canvas 代码将漂亮的(基于 CSS)条形图转换为图像,然后可以根据出色的http://www.kubilayerdogan.net/?p直接在 word 文档中使用=304。
这张图片打印不好,所以我打算在运行 html2canvas 代码之前让源 HTML 在屏幕上变大(隐藏在内存中)(使用 jQuery)——这样我就可以得到一个更大的图像然后缩小尺寸并获得更高的 DPI 数。
首先,我了解到 CSS 宽度和高度对 Word 中的图像没有影响。同样,以下不起作用。
<img class="cobrandedlogo" src="' . $logourl . '" height="50px" />';
但我发现使用“点”的工作方式如下:
<img class="cobrandedlogo" src="' . $logourl . '" height="50" />';
但这会产生一个非常拉伸的图像(当然取决于源材料)。我希望它根据原始图像进行缩放。
我正在使用 PHP。
我发现了这篇似乎会有所帮助的 SO 文章:Calculating image size ratio for resizing
这是我一直在使用的一些代码:
生成 div 图像的 jQuery 代码,稍微修改显示的 HTML 并将其提交到 PHP 文件:
var wordreport = jQuery('#container').clone();
jQuery(wordreport).find('#stats').html('<img src="http://improvedemployees.com/assets/teamstats/' + jQuery('#imgname').val() + '" />');
jQuery(wordreport).find('.columncontainer').each(function() {
jQuery(this).children().wrapAll('<table><tr>');
});
// these were 3 columns on the screen - converted to a table and tds for Word
jQuery(wordreport).find('.memberstrengths').wrap('<td valign=top>');
jQuery(wordreport).find('.membercommunication').wrap('<td valign=top>');
jQuery(wordreport).find('.memberimproving').wrap('<td valign=top>');
jQuery(wordreport).find('#generateword').remove();
jQuery(wordreport).find('script').remove();
var htmlpluscss = jQuery(wordreport).html();
htmlpluscss = '<style>.reportsection {border:1px solid #fff!important; padding:0px; margin-bottom:0px;}</style>' + htmlpluscss;
jQuery('#dochtml').val(htmlpluscss);
jQuery('#rawhtml').val(htmlpluscss);
jQuery('#stats').html2canvas({
onrendered: function (canvas) {
//Set hidden field's value to image data (base-64 string)
jQuery('#img_val').val(canvas.toDataURL("image/png"));
//Submit the form manually
document.getElementById("getword").submit();
}
});
还有这个用于生成单词 doc 的按钮的 HTML:
<div id="generateword">
<form method="post" action="/createword.php" target="_blank" id="getword">
<input type="hidden" name="docname" id="docname" />
<input type="hidden" name="dochtml" id="dochtml" />
<input type="hidden" name="orientation" id="orientation" value="landscape" />
<input type="hidden" name="logourl" value="<?php echo get_user_meta(get_current_user_id(), 'reportlogourl', true); ?>" />
<input type="hidden" name="img_val" id="img_val" value="" />
<input type="hidden" name="imgname" id="imgname" value="<?php echo $_GET['teamid']; ?>.png" />
<input type="button" value="View in Word" id="createword" />
</form>
</div>
最后 - 这是我使用的 PHP 文件:
<?php
header("Content-type: application/vnd.ms-word");
header("Content-Disposition: attachment;Filename=" . $_POST['docname'] . ".doc");
$filteredData=substr($_POST['img_val'], strpos($_POST['img_val'], ",")+1);
//Decode the string
$unencodedData=base64_decode($filteredData);
//Save the image
$imgfile = $_POST['imgname'];
//file_put_contents("/assets/teamstats/" . $imgfile, $unencodedData);
file_put_contents("assets/teamstats/" . $imgfile, $unencodedData);
$orientation = 'portrait';
if(isset($_POST['orientation'])) {
$orientation = 'landscape';
}
$logourl = '';
if(isset($_POST['logourl'])) {
$logourl = $_POST['logourl'];
}
echo '<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
xmlns="http://www.w3.org/TR/REC-html40">
<head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><title></title>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<style>
@page
{
';
if ($orientation == 'landscape') {
echo 'mso-page-orientation: landscape;
size:29.7cm 21cm; margin:1cm 1cm 1cm 1cm;';
}
else {
echo 'mso-page-orientation: portrait;
size:21cm 29.7cm; margin:1cm 1cm 1cm 1cm;';
}
echo '
}
@page Section1 {
mso-header-margin:.5in;
mso-footer-margin:.5in;
mso-header: h1;
mso-footer: f1;
}
div.Section1 { page:Section1;
font-family:Helvetica;
';
if ($orientation == 'landscape') {
echo 'font-size:12px; ';
}
else {
echo 'font-size:14px; line-height:20px;';
}
echo '
text-align:left;}
table#hrdftrtbl
{
margin:0in 0in 0in 900in;
width:1px;
height:1px;
overflow:hidden;
}
p.MsoHeader {
';
if ($orientation == 'landscape') {
echo ' tab-stops:right 29.0cm;';
}
else {
echo ' tab-stops:right 21.0cm;';
}
echo '
}
p.MsoFooter, li.MsoFooter, div.MsoFooter
{
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
';
if ($orientation == 'landscape') {
echo 'tab-stops:center 14.5cm right 29.0cm;';
}
else {
echo 'tab-stops:center 10.5cm right 21.0cm;';
}
echo '
font-size:12px;
}
</style>
<xml>
<w:WordDocument>
<w:View>Print</w:View>
<w:Zoom>100</w:Zoom>
<w:DoNotOptimizeForBrowser/>
</w:WordDocument>
</xml>
</head>';
echo "<body>";
echo '<div class="Section1">';
echo $_POST['dochtml'];
echo '<style>h3, table {
margin-top:0px!important;
}
div.membername {
margin-bottom:0px!important;
margin-top:0px!important;
height:39px!important;
line-height:25px!important;
}
div.membername, span.membershape, span.membertraits {
height:39px!important;
line-height:25px!important;
padding:0px!important;
margin:0px!important;
}
h2.membername {
margin-top:0px!important;
margin-bottom:0px!important;
padding-top:0px!important;
padding-bottom:0px!important;
line-height:25px;
height:25px!important;
font-size:24px!important;
}
table.tdmembername, table.tdmembername tr, table.tdmembername td, table.tdmembername span {
background-color:black!important;
}
div.columncontainer {
margin-top:0px!important;
}
img.cobrandedlogo {
max-height:50px;
height:50px;
}
</style>
';
echo '
<br/>
<table id="hrdftrtbl" border="0" cellspacing="0" cellpadding="0">
<tr><td> <div style="mso-element:header" id=h1 >
<p class=MsoHeader ><img src="http://improvedemployees.com/img/logo-x50.png" style="height:50px" height="50px"/><span style=mso-tab-count:1"></span>';
if ($logourl != "") {
$newheight = 50;
list($originalwidth, $originalheight) = getimagesize($logourl);
$ratio = $originalheight / $newheight;
$newwidth = $originalwidth / $ratio;
echo '<img class="cobrandedlogo" src="' . $logourl . '" height="50" width="' . $newwidth . '" />';
}
echo '</p>
</div>
</td>
<td>
<div style="mso-element:footer" id=f1><span style="position:relative;z-index:-1">
<p class=MsoFooter>
<span style=mso-tab-count:1"></span>
www.improvedemployees.com
<span style=mso-tab-count:1"></span>
Page <span style="mso-field-code: PAGE "><span style="mso-no-proof:yes"></span> of <span style="mso-field-code: NUMPAGES "></span></span>
</p>
</div>
<div style="mso-element:header" id=fh1>
<p class=MsoHeader><span lang=EN-US style="mso-ansi-language:EN-US"> <o:p></o:p></span></p>
</div>
<div style="mso-element:footer" id=ff1>
<p class=MsoFooter><span lang=EN-US style="mso-ansi-language:EN-US"> <o:p></o:p></span></p>
</div>
</td></tr>
</table>
</div>';
echo "</body>";
echo "</html>";
?>
如何仅使用高度或宽度来调整我插入到 word(使用 HTML)中的图像的大小,以便 Word 保留纵横比?