feat: hook to fetch additional print settings in print view
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index e05c70e..de04abb 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -13,6 +13,7 @@
 from erpnext.stock.doctype.stock_entry.stock_entry import get_used_alternative_items
 from erpnext.stock.doctype.serial_no.serial_no import get_auto_serial_nos, auto_make_serial_nos, get_serial_nos
 from frappe.contacts.doctype.address.address import get_address_display
+from erpnext.controllers.print_settings import print_settings_for_taxes
 
 from erpnext.accounts.doctype.budget.budget import validate_expense_against_budget
 from erpnext.controllers.stock_controller import StockController
@@ -20,14 +21,7 @@
 class BuyingController(StockController):
 	def __setup__(self):
 		if hasattr(self, "taxes"):
-			self.flags.print_taxes_with_zero_amount = cint(frappe.db.get_single_value("Print Settings",
-				 "print_taxes_with_zero_amount"))
-			self.flags.show_inclusive_tax_in_print = self.is_inclusive_tax()
-
-			self.print_templates = {
-				"total": "templates/print_formats/includes/total.html",
-				"taxes": "templates/print_formats/includes/taxes.html"
-			}
+			print_settings_for_taxes(self)
 
 	def get_feed(self):
 		if self.get("supplier_name"):
diff --git a/erpnext/controllers/print_settings.py b/erpnext/controllers/print_settings.py
index c41db25..edd722d 100644
--- a/erpnext/controllers/print_settings.py
+++ b/erpnext/controllers/print_settings.py
@@ -5,20 +5,31 @@
 import frappe
 from frappe.utils import cint
 
-def print_settings_for_item_table(doc):
+def print_settings_for_item_table(doc, setting_value=None):
 
 	doc.print_templates = {
 		"qty": "templates/print_formats/includes/item_table_qty.html"
 	}
 	doc.hide_in_print_layout = ["uom", "stock_uom"]
 
-	doc.flags.compact_item_print = cint(frappe.db.get_single_value("Print Settings", "compact_item_print"))
+	doc.flags.compact_item_print = setting_value if setting_value is not None\
+		else cint(frappe.db.get_single_value("Print Settings", "compact_item_print"))
 
 	if doc.flags.compact_item_print:
 		doc.print_templates["description"] = "templates/print_formats/includes/item_table_description.html"
 		doc.flags.compact_item_fields = ["description", "qty", "rate", "amount"]
 		doc.flags.format_columns = format_columns
 
+def print_settings_for_taxes(doc, setting_value=None):
+	doc.flags.print_taxes_with_zero_amount = setting_value if setting_value is not None\
+		else cint(frappe.db.get_single_value("Print Settings", "print_taxes_with_zero_amount"))
+	doc.flags.show_inclusive_tax_in_print = doc.is_inclusive_tax()
+
+	doc.print_templates = {
+		"total": "templates/print_formats/includes/total.html",
+		"taxes": "templates/print_formats/includes/taxes.html"
+	}
+
 def format_columns(display_columns, compact_fields):
 	compact_fields = compact_fields + ["image", "item_code", "item_name"]
 	final_columns = []
@@ -26,3 +37,38 @@
 		if column not in compact_fields:
 			final_columns.append(column)
 	return final_columns
+
+@frappe.whitelist()
+def show_compact_item_setting(doc):
+	meta = frappe.get_meta(doc.doctype)
+	items_field = meta.get_field('items')
+	if items_field and items_field.fieldtype == 'Table':
+		return True
+	return False
+
+@frappe.whitelist()
+def show_taxes_setting(doc):
+	meta = frappe.get_meta(doc.doctype)
+	items_field = meta.get_field('taxes')
+	if items_field and items_field.fieldtype == 'Table':
+		return True
+	return False
+
+def get_print_settings():
+	settings = {
+		'compact_item_print': {
+			'condition': 'erpnext.controllers.print_settings.show_compact_item_setting',
+			'fieldtype': 'Check',
+			'child_field': 'items',
+			'label': 'Compact Item Print',
+			'set_template': 'erpnext.controllers.print_settings.print_settings_for_item_table'
+		},
+		'print_taxes_with_zero_amount': {
+			'condition': 'erpnext.controllers.print_settings.show_taxes_setting',
+			'fieldtype': 'Check',
+			'label': 'Print taxes with zero amount',
+			'set_template': 'erpnext.controllers.print_settings.print_settings_for_taxes'
+		}
+	}
+
+	return settings
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index 5886171..ac26d3f 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -11,20 +11,15 @@
 from erpnext.stock.doctype.item.item import set_item_default
 from frappe.contacts.doctype.address.address import get_address_display
 from erpnext.controllers.accounts_controller import get_taxes_and_charges
+from erpnext.controllers.print_settings import print_settings_for_taxes
 
 from erpnext.controllers.stock_controller import StockController
 
 class SellingController(StockController):
 	def __setup__(self):
 		if hasattr(self, "taxes"):
-			self.flags.print_taxes_with_zero_amount = cint(frappe.db.get_single_value("Print Settings",
-				"print_taxes_with_zero_amount"))
-			self.flags.show_inclusive_tax_in_print = self.is_inclusive_tax()
+			print_settings_for_taxes(self)
 
-			self.print_templates = {
-				"total": "templates/print_formats/includes/total.html",
-				"taxes": "templates/print_formats/includes/taxes.html"
-			}
 
 	def get_feed(self):
 		return _("To {0} | {1} {2}").format(self.customer_name, self.currency,
@@ -189,7 +184,7 @@
 		for it in self.get("items"):
 			if not it.item_code:
 				continue
-			
+
 			last_purchase_rate, is_stock_item = frappe.get_cached_value("Item", it.item_code, ["last_purchase_rate", "is_stock_item"])
 			last_purchase_rate_in_sales_uom = last_purchase_rate * (it.conversion_factor or 1)
 			if flt(it.base_net_rate) < flt(last_purchase_rate_in_sales_uom):
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index b510208..d455972 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -41,6 +41,7 @@
 get_help_messages = "erpnext.utilities.activation.get_help_messages"
 leaderboards = "erpnext.startup.leaderboard.get_leaderboards"
 filters_config = "erpnext.startup.filters.get_filters_config"
+additional_print_settings = "erpnext.controllers.print_settings.get_print_settings"
 
 on_session_creation = [
 	"erpnext.portal.utils.create_customer_or_supplier",
diff --git a/erpnext/startup/filters.py b/erpnext/startup/filters.py
index a99e49b..ec07329 100644
--- a/erpnext/startup/filters.py
+++ b/erpnext/startup/filters.py
@@ -2,13 +2,13 @@
 import frappe
 
 def get_filters_config():
-    filters_config = {
+	filters_config = {
 		"fiscal year": {
 			"label": "Fiscal Year",
 			"get_field": "erpnext.accounts.utils.get_fiscal_year_filter_field",
 			"valid_for_fieldtypes": ["Date", "Datetime", "DateRange"],
 			"depends_on": "company",
 		}
-    }
+	}
 
-    return filters_config
\ No newline at end of file
+	return filters_config
\ No newline at end of file