質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

1257閲覧

C#でHTMLの動的要素の高さを取得したい

MellMell

総合スコア14

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2019/07/29 06:51

前提・実現したいこと

C#でHTMLの動的要素の高さを取得したい
C#でHTMLの動的要素の高さ(<tr></tr>まで)の取得方法

発生している問題・エラーメッセージ

現在、C#でPDFの出力を試みています。
大枠として、画面側のコードはHTMLのブロック単位で区切り、各々のセクションで内容を表示させています。
今回、各セクションの高さ(高さは固定されておらず、取得するデータによって動的に変化します。)によって1ページの表示セクション数を変更したいのですが、この各セクションの要素の高さ取得方法がわかりません。
セクションの要素の高さとはHTMLの<tr></tr>までの高さです。

どなたかC#で、このセクションの要素の高さ(HTMLの<tr></tr>までの高さ)を取得できる方法を教えていただけないでしょうか。

JAVASCRIPTには.getBoundingClientRect()でできると調べましたが、このようなメソッドはC#では見つかりませんでした。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yutampp

2019/07/29 09:31

C#でPDFの出力を試みていることと、HTML要素の高さを取得したいことが私の中では繋がらないのですが、その辺もう少し詳しく教えていただけますか。 また、HTMLの<tr>~</tr>までの高さというのもよく分かりません。 TR要素はテーブルの行を表します。 「~」にあたる内容(TD要素)の高さによってTR要素の高さも変わるというのなら確かにそうですが、「まで」という表現を使っているということはTD要素の数で高さが変わる・・・?ことを想定しているような気がするのです。 ちょっと想像がつかないので、絵でやりたいことを説明してくれるとありがたいです。
guest

回答1

0

ベストアンサー

WebBrowser コントロールを使って HtmlElement を取得したら InvokeMember で getBoundingClientRect を実行できるようです。

取得したオブジェクトは COM オブジェクトなので解放をお忘れなく。

C#

1using System; 2using System.Drawing; 3using System.Runtime.InteropServices; 4using System.Windows.Forms; 5 6namespace WindowsFormsApp3 7{ 8 public partial class Form1 : Form 9 { 10 public Form1() { 11 InitializeComponent(); 12 } 13 14 private void button1_Click(object sender, EventArgs e) { 15 webBrowser1.DocumentText = 16 @"<html><head><script></script></head><body><table><tr id=hoge><td>test</td></tr></table></body></html>"; 17 } 18 19 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { 20 var element = webBrowser1.Document.GetElementById("hoge"); 21 dynamic rect = element.InvokeMember("getBoundingClientRect"); 22 Rectangle rectangle = Rectangle.FromLTRB(rect.left, rect.top, rect.right, rect.bottom); 23 MessageBox.Show(rectangle.ToString()); 24 Marshal.FinalReleaseComObject(rect); 25 } 26 } 27} 28 29

投稿2019/07/29 09:24

KOZ6.0

総合スコア2622

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MellMell

2019/07/30 06:36

ご回答いただき、ありがとうございます。 無事に解決することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問