13

標準の Avery スタイルのラベル シートに動的に作成されたラベルを印刷する必要がある ASP.Net Web アプリケーションに取り組んでいます (特定のサイズが 1 つあるため、全体的なレイアウトは 1 つだけです)。ラベルの行数は可変 (3 ~ 6 行) で、テキスト行またはグラフィック バーコード イメージのいずれかを含めることができます。

私が引き継いだ最初のカットでは、等幅フォントを使用してフォーマットの問題を軽減しましたが、ラベルに十分なテキストを収めることができず、顧客は不満を持っていました. 基本的にはフォーマットされたテキストでした。

私の次のバージョンでは、プロポーショナル フォントを使用してラベルをフォーマットするために、TABLE、DIV、CSS、および少しの JavaScript 計算を使用しました。まだ少し調整が必要ですが (ユーザーは印刷マージンを正しく設定し、印刷ヘッダーとフッターをオフにする必要がありました)、うまくいくように見えました。

ただし、異なるプリンターがテキストをレンダリングする方法にはいくつかのバリエーションがあるようです (WYS は WYG ではありません)。そのため、少なくとも 2 つの異なるプリンター (インクジェットとレーザー プリンター) を使用して異なるブラウザーでテストしましたが、一部のユーザーのラベルは、並ばないで。ページ設定ダイアログの余白を調整することでわずかな余白の変動を調整できますが、より困難な問題は、ラベル間の間隔がわずか 1 インチずれることです。ページの最後で、ラベルのテキストと画像がラベルの上部または下部からはみ出しています。

Word、Excel、または PDF 出力の生成に切り替えようとしていますが、これにはかなりの開発時間がかかり、印刷プロセスに余分な手順が追加される可能性があります。

では、さまざまな種類のプリンターで正確にレンダリングされる HTML/CSS レイアウトを行う方法について何か提案はありますか? 改行/単語区切りが少し異なっていてもあまり気にしませんが、各ラベル領域の左上隅を予測どおりに配置できるようにする必要があります。

現在、ラベルは表のページに沿って流れており、セルのボックス モデルと内部 DIV を微調整して、高さが均一になるようにしています。各要素の絶対配置を使用することが最善の答えかもしれないと思いますが、ラベル要素の ASP.Net 生成のために、それも注意が必要です。それがうまくいくことが確実にわかっていれば、すべてを捨てて別の生成方法に行くよりも、試してみたいと思います。

若干の更新: 現在、絶対配置でいくつかのテストを行っています - 含まれているブロック要素の上と左の座標のみを設定します。これまでのところ、ページ上のオフセット (余白、用紙の位置合わせなど) には多少の違いがありますが、テストしたすべてのブラウザーとプリンターは、要素を互いに正確な位置に配置しました。PDFのヒントに感謝しますが、この方法で絶対配置を使用する際の追加の「落とし穴」を知っている人はいますか?

更新: 記録のために、iTextSharp を使用してラベル印刷部分を書き直しました。

4

10 に答える 10

29

HTML を忘れて PDF を作成します。HTML の印刷は、ブラウザー間だけでなく、同じブラウザーの異なるバージョン間でも非常に多様です。PDFの方がはるかに簡単です。

1 つのブラウザー、フォントのセットアップ、プリンター、月の満ち欠けで正確に正しく設定できたとしても、これまで維持しなければならなかったことの中で最も壊れやすいものになります。PDF を作成するのにどれだけ時間がかかると考えても (無料のライブラリがいくつかあるのでそれほど難しくありません)、最終的には HTML の方がはるかに多くの時間を要します。PDF リーダーは広く展開されており、Word ファイルよりも一貫して印刷されます。

于 2008-10-02T19:48:13.723 に答える
5

Web は、一貫した印刷結果が保証されるフォーマットではありません。MS Word によるラベル印刷の標準サポートと、自動化と生成が比較的容易であることを考えると、その方法を強くお勧めします。

Web コンテンツを使用するときに、すべての種類のブラウザ、オペレーティング システム、およびプリンタで正確に印刷する方法を知りません。

于 2008-10-02T19:48:53.957 に答える
3

「正確に」と「印刷」は、実際にはそれほどうまく連携する 2 つの言葉ではありません。私は 1 年ほど前に OCR/OMR アプリケーションを作成しましたが、PDF を作成するときでさえ、さまざまな印刷ドライバーなどの間に大きな違いがあることに気付きました。そのため、私の直感では、100% 成功することはできないかもしれません。

CSS とレイアウトの問題がうまくいかない場合は、GDI+ を使用して画像としてラベルを作成する必要があるかもしれません。少なくとも、その方法で GetFontMetrics() などを使用できます。

幸運を!

于 2008-10-02T19:51:00.957 に答える
3

私は同様の問題を抱えていましたが、答えはあなたにはできないということです。代わりに、iTextSharp を使用してリアルタイムで PDF ファイルを生成し、それを応答に渡しました。

于 2008-10-02T19:52:17.863 に答える
2

SQL Server Reporting Services を使用して、プリンターに送信する PDF を生成しますが、Web ページに含めることができるコントロールを使用して、画面上で HTML として表示できます。さまざまな Avery 形式に印刷できる RDLC ファイルがインターネット上で入手できます。

于 2008-10-16T04:03:07.990 に答える
1

また、ブラウザー間で印刷動作が一貫していないため、HTML/CSS アプローチにも苦労しました。

ASP.NET から Avery ラベルを生成する C# ライブラリを作成しました。

https://github.com/wheelibin/SharpPDFLabel#readme

画像やテキストをラベルに追加でき、さらに多くのラベル タイプを簡単に定義できます。

(バーコード ラベルに使用します。バーコードは画像として生成され、このライブラリを使用してラベルに追加されます。)

乾杯

于 2011-11-15T07:43:01.880 に答える
0

Flash は、実装と保守が少し複雑ではありますが、ラベルのような印刷可能なものをプッシュするのにも適した方法です。ほとんどの場合、PDF よりもはるかに高速に表示され、ページのデザインに埋め込むことができ、フラッシュ内に「印刷」ボタンを追加するだけです。

数年前、HTML と PDF を使用して確認の領収書を生成していたときに、これを行いました。HTML は「OK」ですが、エンド ユーザーの Web ブラウザーに翻弄されるため、すぐにそのメソッドを破棄しました。PDF は、PDF リーダーがあれば問題ありませんが、驚いたことに、多くのお客様が PDF リーダーを持っていませんでした。そのため、いくつかの動的テキスト領域と「印刷」ボタンを含む単純な Flash ムービーを使用する FLASH バージョンに切り替えた後、これもダンプされました。いくつかのフラッシュ変数を使用して、ページとフラッシュの間でデータをやり取りしました。また、Web サービスを使用することもできます。

単純なテキスト以外の何かが必要な場合は、DynamicPDF.comの PDF Generator コンポーネントの無料のコミュニティ エディションを使用します。それはうまく機能し、非常に高速です。

于 2008-10-03T16:23:15.630 に答える
0

アプリにいくつかのオプションを追加して、ユーザーが特定の構成に合わせて間隔を調整できるようにします。必要に応じてラベルにこれを含め、メディア セレクターを介してスタイルを設定することもできますが、おそらくそれらをどこかに保持することもできます。

于 2008-10-02T19:50:07.010 に答える
0

私はちょうど同じことを経験しました。JasperReportsを使用してラベル付きプリンターに直接印刷する短い小さなJSFアプリ(Gl​​assfishで実行)を切り替えて作成することになりました。Jasper はプリンター (およびブラウザーの PDF) に直接出力できるため、プッシュ ボタン、プリンターでのインスタント ラベル、画面上で表示する必要さえありません。

于 2011-12-16T21:07:41.843 に答える