20210114のJavaに関する記事は6件です。

Java Wordに複数の文字のウォーターマークを追加

以前はWordにウォーターマークを追加する方法を紹介しましたが、今回はWordに複数の文字のウォーターマークを追加する方法を紹介することにします。 Free Spire.Doc for Javaというライブラリを使って簡単にできますよ。

下準備

1.E-iceblueの公式サイトからFree Spire.doc for Java無料版をダウンロードしてください。

f:id:lendoris:20210114145341p:plain

2.IDEを起動して新規プロジェクトを作成してから、インストールされたファイルにあった相応しいSpire.doc.jarを参照に追加してください。

f:id:lendoris:20210114145406p:plain

コード

import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.HeaderFooter;
import com.spire.doc.Section;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.documents.ShapeLineStyle;
import com.spire.doc.documents.ShapeType;
import com.spire.doc.fields.ShapeObject;
import java.awt.*;

public class Watermark {
    public static void main(String[] args) {
        //ドキュメントをロードします。
        Document doc = new Document();
        doc.loadFromFile("C:\\Users\\Test1\\Desktop\\Sample.docx");
        //Add WordArt shape and set the size
        ShapeObject shape = new ShapeObject(doc, ShapeType.Text_Plain_Text);
        shape.setWidth(50);
        shape.setHeight(15);
        //テキストの位置・形式を配置します。
        shape.setVerticalPosition(20);
        shape.setHorizontalPosition(20);
        shape.setRotation(315);
        shape.getWordArt().setText("複写禁止");
        shape.setFillColor(Color.red);
        shape.setLineStyle(ShapeLineStyle.Single);
        shape.setStrokeColor(new Color(192, 192, 192, 255));
        shape.setStrokeWeight(1);

        Section section;
        HeaderFooter header;
        for (int n = 0; n < doc.getSections().getCount(); n++) {
            section = doc.getSections().get(n);
            //Get the header of section
            header = section.getHeadersFooters().getHeader();
            Paragraph paragraph1;
            for (int i = 0; i < 4; i++) {
                //Add the header to the paragraph
                paragraph1 = header.addParagraph();
                for (int j = 0; j < 3; j++) {
                    //テキストをコピーします。
                    shape = (ShapeObject) shape.deepClone();
                    shape.setVerticalPosition(40 + 120 * i);
                    shape.setHorizontalPosition(20 + 130 * j);
                    paragraph1.getChildObjects().add(shape);
                }
            }
        }
        //保存します。
        doc.saveToFile("output/AddMultipleTextWatermark.docx", FileFormat.Docx_2013);
    }
}

実行結果

f:id:lendoris:20210114145451p:plain

 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Java  Excel ワークシートを印刷

前の記事ではJavaでWord文書を印刷する方法を紹介しましたが、今回の記事ではJava  でExcel ワークシートを印刷する方法を紹介することにしたいと思います。Spire.XLS for Javaを使って「通常使うプリンターで印刷」と「指定するプリンターで印刷」二種類の仕方でやりましょう。

下準備

1.E-iceblueの公式サイトからFree Spire. XLS for Java無料版をダウンロードしてください。

f:id:lendoris:20210114143742p:plain

2.IDEを起動して新規プロジェクトを作成してから、インストールされたファイルにあった相応しいSpire. XLS.jarを参照に追加してください。

f:id:lendoris:20210114143753p:plain

通常使うプリンターで印刷

import com.spire.xls.*;

import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

public class Print {
    public static void main(String[] args) {
        //excelをロードします。
        Workbook workbook = new Workbook();
        workbook.loadFromFile("test.xlsx");

        // PrinterJob objectを作成します。
        PrinterJob printerJob = PrinterJob.getPrinterJob();

        PageFormat pageFormat = printerJob.defaultPage ();

        //印刷ページを設定します。
        Paper paper = pageFormat.getPaper();
        paper.setImageableArea(0, 0, pageFormat.getWidth(), pageFormat.getHeight());
        pageFormat.setPaper(paper);
        printerJob.setCopies(1);
        printerJob.setPrintable(workbook, pageFormat);

        //印刷します。
        try {
            printerJob.print();
        } catch (PrinterException e) {
            e.printStackTrace();
        }
    }
}

指定するプリンターで印刷

import com.spire.xls.*;

import javax.print.PrintService;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

public class Print {
    public static void main(String[] args) throws Exception {
        //excelをロードします。
        Workbook workbook = new Workbook();
        workbook.loadFromFile("test.xlsx");

        // PrinterJob objectを作成します。
        PrinterJob printerJob = PrinterJob.getPrinterJob();

        //プリンターを指定します。
        PrintService myPrintService = findPrintService("\\\\192.168.1.104\\HP LaserJet P1007");
        printerJob.setPrintService( myPrintService);
        PageFormat pageFormat = printerJob.defaultPage();

        //印刷のページを設定します。
        Paper paper = pageFormat.getPaper();
        paper.setImageableArea(0, 0, pageFormat.getWidth(), pageFormat.getHeight());
        pageFormat.setPaper(paper);
        printerJob.setCopies(1);
        printerJob.setPrintable(workbook, pageFormat);

        //印刷します。
        try {
            printerJob.print();
        } catch (PrinterException e) {
            e.printStackTrace();
        }
    }

    private static PrintService findPrintService(String printerName) {
        PrintService[] printServices = PrinterJob.lookupPrintServices();
        for (PrintService printService : printServices) {
            if (printService.getName().equals(printerName)) {
                return printService;
            }
        }
        return null;
    }

 

f:id:lendoris:20210114143915p:plain

 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gradle - No Main Manifest Attribute

Solved

com.johnny.Main is your program's entry point.

...
jar {
  manifest {
    attributes(
      'Main-Class': 'com.johnny.Main'
    )
  }
}
...

https://stackoverflow.com/questions/43081894/gradle-output-jar-has-no-main-class/
https://stackoverflow.com/questions/32567167/gradle-no-main-manifest-attribute

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

SOQL で条件に日本語を指定してQuery実行で エラー400発生

Salesforce に対し、REST-APIにてSOQLのQuery SELECTを発行
whereへ日本語を指定すると エラー400が発生
言語はJava

Workbenchでは、正常に動作

日本語を以下でエンコードする事で、正常に動作

wkStr = URLEncoder.encode(wkStr, "UTF-8");

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

リファクタリング 不吉な匂い MEMO

不吉な匂い(リファクタリングの可能性)

  • 重複したコード
    • コードがあちこちでダブっている
  • 長すぎるメソッド
    • メソッドが長すぎる
  • 巨大なクラス
    • クラスが持っているフィールドやメソッドが多すぎる
  • 多すぎる引数
    • メソッドへ渡す引数が多すぎる
  • 変更の発散
    • 仕様変更が起きた時の修正箇所があちこちに散らばっている
  • 変更の分散
    • あるクラスを修正すると、他のクラスもあわせて修正しなければならない
  • 属性、操作の横恋慕
    • いつも他のクラスの中身をいじってるクラスがある
  • データの群れ
    • まとめて扱うべき複数のデータが、1つのクラスにまとまっていない
  • 基本データ型への執着
    • クラスを作らず、intのような基本データ型ばかり使っている
  • スイッチ文
    • switch文やif文を使って振る舞いを分けている
  • パラレル継承
    • サブクラスを作るとクラス階層の別のところにもサブクラスを作らなければならない
  • 怠け者クラス
    • クラスが大した仕事をしていない
  • 疑わしき一般化
    • いつかこういう拡張もするだろうと期待して、一般化しすぎる
  • 一時的属性
    • 一時的にしか使わないフィールドがある
  • メッセージの連鎖
    • メソッドの呼び出しの連鎖がある
  • 仲介人
    • 移譲ばかりしていて、自分では仕事をしていないクラスがある
  • 不適切な関係
    • その必要がないのに双方向リンクを張っていたり、IS-A関係がないのに継承を使っていたりする
  • クラスのインタフェース不一致
    • クラスのインタフェース(API)が不適切である
  • 未熟なクラスライブラリ
    • 既存のクラスライブラリが使いにくい
  • データクラス
    • フィールドとgetterメソッドとsetterメソッドしか持っていないクラスがある
  • 相続拒否
    • 継承しているメソッドなのに、それを呼ぶと問題が起きる
  • コメント
    • コードの不備を補なうために、詳しいコメントがある
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

リファクタリングの可能性を示唆する不吉な匂い一覧

一覧

  • 重複したコード
    • コードがあちこちでダブっている
  • 長すぎるメソッド
    • メソッドが長すぎる
  • 巨大なクラス
    • クラスが持っているフィールドやメソッドが多すぎる
  • 多すぎる引数
    • メソッドへ渡す引数が多すぎる
  • 変更の発散
    • 仕様変更が起きた時の修正箇所があちこちに散らばっている
  • 変更の分散
    • あるクラスを修正すると、他のクラスもあわせて修正しなければならない
  • 属性、操作の横恋慕
    • いつも他のクラスの中身をいじってるクラスがある
  • データの群れ
    • まとめて扱うべき複数のデータが、1つのクラスにまとまっていない
  • 基本データ型への執着
    • クラスを作らず、intのような基本データ型ばかり使っている
  • スイッチ文
    • switch文やif文を使って振る舞いを分けている
  • パラレル継承
    • サブクラスを作るとクラス階層の別のところにもサブクラスを作らなければならない
  • 怠け者クラス
    • クラスが大した仕事をしていない
  • 疑わしき一般化
    • いつかこういう拡張もするだろうと期待して、一般化しすぎる
  • 一時的属性
    • 一時的にしか使わないフィールドがある
  • メッセージの連鎖
    • メソッドの呼び出しの連鎖がある
  • 仲介人
    • 移譲ばかりしていて、自分では仕事をしていないクラスがある
  • 不適切な関係
    • その必要がないのに双方向リンクを張っていたり、IS-A関係がないのに継承を使っていたりする
  • クラスのインタフェース不一致
    • クラスのインタフェース(API)が不適切である
  • 未熟なクラスライブラリ
    • 既存のクラスライブラリが使いにくい
  • データクラス
    • フィールドとgetterメソッドとsetterメソッドしか持っていないクラスがある
  • 相続拒否
    • 継承しているメソッドなのに、それを呼ぶと問題が起きる
  • コメント
    • コードの不備を補なうために、詳しいコメントがある
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む