2

.docx ファイルを mysql データベースに大きなブロブとして個別のチャンクに保存しています (各ブロブがオーバーフローしないようにするため)。次に、php で、データベースのチャンクを「接着」した後にドキュメントを表示します。ドキュメントに改ページがないように見えることを除いて、すべてがうまく見えます。これは、他のプログラムにエクスポートしようとするときに問題になります。そこに改ページを入れる方法や、どこで間違ったのか知っている人はいますか?

<?
$username=xxx;
$password=xxx;
$database=xxx;

mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die("Unable to select database");

$doc=$_GET['doc'];
header('Content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
$request = mysql_query("SELECT docData FROM tblDoc WHERE doc='$doc' ORDER BY pieceOrder ASC");
while($row=mysql_fetch_array($request)) {
    echo $row['docData'];
}
mysql_close();
?>
4

2 に答える 2

1

DOCX ファイルは、名前が変更された ZIP ファイルであり、多数の XML ファイルやその他のアセットが内部に含まれています。アップロード用にファイルを分割し、ダウンロード用に正しい順序で再構築した場合、最初にアップロードされたファイルとの違いはまったくないはずです。ただし、ファイルの再アセンブルでエラーが発生した場合は、ファイルがまったく開かない可能性が高くなります。改ページを実際に削除する唯一の方法は、これらの特定の XML タグを内部 XML ファイルの一部から削除することです。

ただし、これは長いショットかもしれませんが、MS Word ウィンドウの右下、ズーム スライダーの左側に、ドキュメントの表示に使用しているビューを示す 5 つの小さなアイコンがあります。(リボンの [表示] -> [ドキュメント ビュー] からも同じことができます。) (特定の詳細は、Word のバージョンによって異なる場合があります。) 現在、既定値は最初の [印刷レイアウト]であり、次に[全画面表示] 、 [ Web レイアウト] 、 [アウトライン] があります。 、およびドラフト。Web からのドキュメントの場合、Word のコピーがWeb レイアウトを自動的にオンにする可能性はありますか? ( Web レイアウトには改ページがありません。)

さらに2つのこと:

  1. また、このファイルをダウンロードする必要があることを示すヘッダーを追加するContent-Disposition必要があります (そこに保存されるファイル名を指定することもできます)。

    $filename = 'example.docx';
    header('Content-Disposition: attachment; filename='.$filename);
    
  2. mysql_を使用しないでくださいそれらは安全上のリスクであり、メンテナンス不能なコードにつながります。データベースへのアクセスにはmysqli_またはPDOを使用することをお勧めします。詳細はこちら。

于 2013-04-25T23:00:03.030 に答える
0

すべてが問題なく保管されていることがわかりました。あなたが言ったように、@pilsetnieks。アプリからエクスポートしていたとき、正しいタイプとして割り当てていなかったため、取得したフォーマットを期待していませんでした。ご助力いただきありがとうございます!

于 2013-05-06T20:10:32.250 に答える